#javascript #arrays #for-loop
#javascript #массивы #for-цикл
Вопрос:
Я хочу помещать каждую итерацию в массив, который находится в основном массиве. Вот так: 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
Комментарии:
1.
descendantPairs = descendantPairs.push(descendants.slice(i, i chunk));
???2. @MarkMeyer необходимо сохранить порядок потомков, чтобы они были парами, т.Е. array = [ [A,C], [C,D], [D,C]]
3. Не перезаписывайте всю переменную результатом push()
4. Почему вы не используете
if (value%2 == 0)
(даже)
Ответ №1:
Метод push возвращает длину добавленного элемента, а не массив после нажатия элемента.
заменить descendantPairs = descendantPairs.push(descendants.slice(i, i chunk));
на
descendantPairs.push(descendants.slice(i, i chunk));
Ответ №2:
Что-то вроде этого поможет:
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);
Ответ №3:
Ваш код содержит одну проблему, вы переназначаете descendantPairs
возвращаемое значение Array#push
метода, которое будет длиной массива, и это приводит к выдаче ошибки на следующей итерации (поскольку для типа нет метода 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);
Ответ №4:
Вы могли бы поместить каждый фрагмент в результирующий массив, не указывая новую длину массива. Следующий цикл выдает ошибку, потому что ваш 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);
Комментарии:
1. Можете ли вы объяснить, чем это отличается от того, что делала OP, поскольку она помещала каждый фрагмент в результирующий массив?
2. он не присваивает результат нажатия (новую длину массива) результирующему набору.
Ответ №5:
Вы можете использовать простой цикл 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)
Ответ №6:
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);
Комментарии:
1. Действительно стоит это протестировать. Имеет серьезные недостатки
2. Есть встроенный редактор кода, который позволяет запускать ваш код, если вы нажмете на
<>
при редактировании ответа