сделать массив массивов из цикла for - PullRequest
1 голос
/ 07 апреля 2019

Я хочу поместить каждую итерацию в массив, который находится в основном массиве.Вот так: 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

Ответы [ 6 ]

2 голосов
/ 07 апреля 2019

Метод push возвращает длину добавленного элемента, а не массив после нажатия элемента.

заменить descendantPairs = descendantPairs.push(descendants.slice(i, i + chunk)); с

descendantPairs.push(descendants.slice(i, i + chunk));
1 голос
/ 07 апреля 2019

Вы можете использовать простой цикл 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)
1 голос
/ 07 апреля 2019

Что-то вроде этого поможет:

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);
1 голос
/ 07 апреля 2019

Ваш код содержит одну проблему, вы переназначаете descendantPairs с возвращаемым значением Array#push метода, который будет длиной массива и приведет к ошибке на следующей итерации (так как для типа Number) метод push отсутствует.

Чтобы все заработало, просто удалите переназначающую деталь и запишите значение после цикла 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);
1 голос
/ 07 апреля 2019

Вы можете поместить каждый фрагмент в массив результатов, не задавая новую длину массива. Следующий цикл выдает ошибку, потому что ваш 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);
0 голосов
/ 07 апреля 2019

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...