Javascript: превратить вложенный массив в один массив, используя вложенный цикл for - PullRequest
0 голосов
/ 22 ноября 2018

Это просто простое упражнение javascript, над которым я работаю.

Я пытаюсь преобразовать этот массив ...

var array = [
[1,2],
[3,4],
[5,6]
];

в ...

array = [1, 2, 3, 4, 5, 6];

с помощью этого вложенного цикла for.

var series;
var storage = [];
for (var i = 0; i < array.length; i++) {
    for (var j = 0; j < array[i].length; j++) {
        series = array[i][j];
        for (var k = 0; k < 6; k++) {
            storage[k] = series;
        };
    };
};

console.log(storage);

С выводом ...

//Output: [6, 6, 6, 6, 6, 6]

Почему это выход и как я могу это исправить?

Ответы [ 8 ]

0 голосов
/ 22 ноября 2018
storage = [];
for(var i=0; i<array.length; i++)
    storage = storage.concat(array[i]);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat

0 голосов
/ 22 ноября 2018

Array.concat может сделать это самостоятельно

var merged = [].concat.apply([], array);
0 голосов
/ 22 ноября 2018

var array = [
[1,2],
[3,4],
[5,6]
];
var newArray = [];
for (let i = 0; i < array.length; i++) {
   newArray = newArray.concat(array[i]); 

}
console.log(newArray)
0 голосов
/ 22 ноября 2018

for (var k = 0; k < 6; k++) { не требуется.array[i] будет каждым элементом внутри основного массива, поэтому итерируя по array[i], вы можете получить доступ к каждому элементу

var array = [
  [1, 2],
  [3, 4],
  [5, 6]
];


var series;
var storage = [];
for (var i = 0; i < array.length; i++) {
  for (var j = 0; j < array[i].length; j++) {
    storage.push(array[i][j])
  };
};

console.log(storage);
0 голосов
/ 22 ноября 2018

Вы можете использовать сочетание уменьшить и concat , чтобы достичь того, что вы хотите в одной строке

var array = [
  [1, 2],
  [3, 4],
  [5, 6]
];

console.log(array.reduce((a, v) => a.concat(v), []));

Что касается того, почему ваш код не работает, это в основном до этого бита

for (var k = 0; k < 6; k++) {
    storage[k] = series;
};

Это перезапишет все в массиве с последнимзначение series, которое в вашем случае будет 6

0 голосов
/ 22 ноября 2018

Вы можете использовать синтаксис распространения ES6 следующим образом:

for (let element of array){
    storage.push( ... el )
}
0 голосов
/ 22 ноября 2018

Вы можете использовать array.flat()

Ссылка: Свести

var array = [
  [1,2],
  [3,4],
  [5,6]
];
array.flat();
// 1,2,3,4,5,6....
0 голосов
/ 22 ноября 2018
    series = array[i][j];
    for (var k = 0; k < 6; k++) {
        storage[k] = series;
    };

Серьезно, здесь вы устанавливаете одинаковое значение для каждого элемента результирующего массива.

Возможно, вам нужно что-то вроде

for(let x of array) {
    for(let y of x) {
        storage.push(y)
    }
}

Или, если ваш компьютер JS является экспериментальнымдостаточно просто

var storage = array.flat()
...