我有一个创建子数组数组的函数。它包含三个参数:要在数组中创建的子变量数(numSub
),每个子数组中所需值出现的次数(numValue
)以及所需值({{1} }。
例如,如果我要用value
调用该函数,则需要以下输出:
(3, 2, test)
这是我编写的函数:
Array [Array ["test", "test"], Array ["test", "test"], Array ["test", "test"]]
我遍历了function subarrs(numSub, numValue, value) {
let arr = [];
for (let i = 0; i < numSub; i++) {
arr.push([]);
}
arr.forEach(function(sub) {
sub.fill(value, 0, numValue - 1);
});
return arr;
}
console.log(subarrs(3, 2, 'test'));
变量,并为每次迭代将一个数组插入numSub
中。这是成功的。 (arr
)
然后,我使用Array [Array [], Array [], Array []]
循环以forEach
填充每个子数组,从索引value
到索引0
结束(因为第二次出现该值实际上位于索引1。)
该功能无法正常工作。我收到的不是上述期望的输出,而是:
numValue - 1
答案 0 :(得分:2)
您可以在长度正确的数组上使用fill
,例如Array(numValue).fill(numValue)
。这是您的操作方法:
function subarrs(numSub, numValue, value) {
return Array.from({length: numSub}, () => Array(numValue).fill(value));
}
console.log(subarrs(3, 2, 'test'));
答案 1 :(得分:1)
您正在填充一个空数组。它仍然是一个空数组(什么也没填)。
您应该构造一些长度的数组:
30 0004.133d.39fb DYNAMIC Po1
完成:
arr.push(new Array(numValue));
答案 2 :(得分:1)
Array.fill()
仅修改数组值。它不会添加新的。再次使用推送
function subarrs(numSub, numValue, value) {
let arr = [];
for (let i = 0; i < numSub; i++) {
arr.push([]);
}
arr.forEach(function(sub) {
for (let j = 0; j < numValue; j++) {
sub.push(value);
}
});
return arr;
}
console.log(subarrs(3, 2, 'test'));
答案 3 :(得分:1)
fill
仅适用于已经存在的索引,在您的情况下,其第二个参数应为数组的length
(默认值),而不是length - 1
。您可以在这里看到它:
let myEmptyArray = [];
let myFullArray = [1, 2, 3, 4];
myEmptyArray.fill(0, 0, 4);
myFullArray.fill(0, 0, 4);
console.log(myEmptyArray, myFullArray)
您可以push
new Array(numValue)
放置一个具有必要插槽的阵列。像这样:
function subarrs(numSub, numValue, value) {
let arr = [];
for (let i = 0; i < numSub; i++) {
arr.push(new Array(numValue));
}
arr.forEach(function(sub) {
sub.fill(value);
});
return arr;
}
console.log(subarrs(3, 2, 'test'));
答案 4 :(得分:1)
您可以使用.push
方法向数组中添加值,而不是.fill
,请参见工作演示:
function subarrs(numSub, numValue, value) {
let arr = [];
for (let i = 0; i < numSub; i++) {
arr.push([]);
for (let j = 0; j < numValue; j++) {
arr[i].push(value);
}
}
return arr;
}
console.log(subarrs(3, 2, 'test'));
答案 5 :(得分:1)
如果您拥有es2015 +,则可以轻松实现:
const subarrs = (length, subLength, value) =>
[...Array(length)].map(() => [...Array(subLength)].fill(value));
subarrs(3, 2, 'test');
(已编辑)第一个评论后