创建带有子子数组的函数

时间:2019-03-06 13:27:04

标签: javascript arrays for-loop foreach

我有一个创建子数组数组的函数。它包含三个参数:要在数组中创建的子变量数(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

6 个答案:

答案 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');

(已编辑)第一个评论后