从for循环中制作数组的数组

时间:2019-04-07 17:00:06

标签: javascript arrays for-loop

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

推送方法和切片,拼接

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

6 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

您可以将每个切片推入结果数组,而无需增加数组的新长度。下一个循环将引发错误,因为您的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);

答案 2 :(得分:1)

您的代码包含一个问题,您正在使用返回值Array#push来重新分配descendantPairs,该方法的值将是数组的长度,并导致在下一次迭代中引发错误(因为存在类型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);

答案 3 :(得分:1)

类似这样的方法可以解决问题:

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);

答案 4 :(得分:1)

您可以使用简单的for循环和<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Title</title> <script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-app.js"></script> <script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-database.js"></script> <script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-auth.js"></script> <script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-functions.js"></script> <script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-firestore.js"></script> </head> <body> <script> // Initialize Firebase var config = { apiKey: 'xxxxxxxxxxx', authDomain: 'xxxxxxxxxxx', databaseURL: 'xxxxxxxxxxx', projectId: 'xxxxxxxxxxx' }; firebase.initializeApp(config); var db = firebase.firestore(); db.doc('testSO/doc1').update({ count1: firebase.firestore.FieldValue.increment(1), array1: firebase.firestore.FieldValue.arrayUnion('arrayItem'), object: { count: firebase.firestore.FieldValue.increment(1), list: firebase.firestore.FieldValue.arrayUnion({ space_id: 'spaceNbr', user: { displayName: 'john doe' } }) } }); </script> </body> </html> 变量,并将第二个索引上的值推送到最终输出

temp

答案 5 :(得分:-1)

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);