【问题标题】:make an array of arrays from for loop从 for 循环创建一个数组数组
【发布时间】:2019-08-28 21:38:33
【问题描述】:

我想将每次迭代放入主数组中的一个数组中。 像这样:array = [[a,b], [c,d], [e,f]]

push方法与切片、拼接

var descendants = [A,C,C,D,C,B], 
chunk = 2, 
descendantPairs = [];
for (var i = 0; i < descendants.length; i += chunk) {
descendantPairs = descendantPairs.push(descendants.slice(i, i + chunk));
console.log("descendantPairs: " + descendantPairs});
}

现在我能够得到这样的对,但我需要对所有对执行更多逻辑,而不仅仅是最后一对,因此我需要一个包含所有对的数组。

我现在在 console.log 中得到了这个:

descendantPairs: A,C descendantPairs: C,D descendantPairs: C,B

【问题讨论】:

  • descendantPairs = descendantPairs.push(descendants.slice(i, i + chunk)); ???
  • @MarkMeyer 需要保持后代的顺序,成对,即array = [ [A,C], [C,D], [D,C]]
  • 不要用 push() 的结果覆盖整个变量
  • 为什么你不使用if (value%2 == 0)(偶数)

标签: javascript arrays for-loop


【解决方案1】:

您可以使用一个简单的 for 循环和一个 temp 变量,并将每隔一个索引上的值推送到最终输出

var arr = [`A`,`C`,`C`,`D`,`C`,`B`]
let op = []
let temp = []

for(let i = 0; i < arr.length; i++){
  temp.push(arr[i])
  if( i % 2 == 1 ){
    op.push(temp)
    temp = []
  }
}
if( temp.length > 0 ){
  op.push(temp)
}

console.log(op)

【讨论】:

    【解决方案2】:

    var arr = ['A','C','C','D','C','B'];
    let chunk = 2;
    let pairs = [];
    
    for(let i = 0; i < arr.length; i+= chunk) {
        pairs.push(arr.slice(i, i + chunk));
    }
    console.log(pairs);

    【讨论】:

    • 应该真正测试一下。有严重缺陷
    • 有一个内置的代码编辑器,如果你在编辑答案时点击&lt;&gt;,就可以运行你的代码
    【解决方案3】:

    您可以将每个切片推送到结果数组,而无需分配数组的新长度。下一个循环会引发错误,因为您的 descendantPairs 现在是一个数字,而不是一个数组,这是使用 push 方法所必需的。

    var descendants = ['A', 'C', 'C', 'D', 'C', 'B'],
        chunk = 2,
        result = [],
        i = 0;
    
    while (i < descendants.length) {
        result.push(descendants.slice(i, i += chunk));
    }
    console.log(result);

    【讨论】:

    • 你能解释一下这与 OP 所做的有什么不同吗,因为她 将每个切片推送到结果数组?
    • 它不会将推入的结果(数组的新长度)分配给结果集。
    【解决方案4】:

    这样的事情可以解决问题:

    let descendants = ['A', 'C', 'C', 'D', 'C', 'B'];
    let chunk = 2;
    let result = [];
    
    for (let i = 0; i < descendants.length; i += chunk) {
      result.push(descendants.slice(i, i+chunk));
    }
    console.log(result);

    【讨论】:

      【解决方案5】:

      您的代码包含一个问题,您正在重新分配 descendantPairs 并返回 Array#push 方法的值,这将是数组的长度,它会导致在下一次迭代中抛出错误(因为没有推送方法输入Number)。

      要使其正常工作,只需删除重新分配部分并在 for 循环后记录值。

      var descendants = ['A', 'C', 'C', 'D', 'C', 'B'],
        chunk = 2,
        descendantPairs = [];
      
      for (var i = 0; i < descendants.length; i += chunk) {
        descendantPairs.push(descendants.slice(i, i + chunk));
      }
      
      console.log("descendantPairs: ", descendantPairs);

      【讨论】:

        【解决方案6】:

        push方法返回的是添加元素的长度,而不是push元素后的数组。

        替换descendantPairs = descendantPairs.push(descendants.slice(i, i + chunk));

        descendantPairs.push(descendants.slice(i, i + chunk));
        

        【讨论】:

          猜你喜欢
          • 2012-09-21
          • 2012-09-11
          • 2021-09-11
          • 1970-01-01
          • 1970-01-01
          • 2023-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多