Перебор мелкой копии вложенного массива в Javascript - PullRequest
1 голос
/ 15 марта 2020

У меня есть вложенный массив:

let array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];

Мне нужно перебрать первый и второй элемент каждого вложенного массива и обновить изменения в исходном массиве. Как мне этого добиться? Я перепробовал много вариантов, но результаты не обновляют исходный массив. Например:

let arrayCop = [];
for (let i = 0; i <= 1; i++) {
   for (let j = 0; j <= 1; j++) {
      arrayCop.push(array[i][j]);
   }
}

arrayCop.forEach(...);

Спасибо.

Это мой полный код, я пытаюсь создать легальный генератор судоку:

let sudoku = [];

function populateSudoku() {
    let array = [];
    while (array.length <= 8) {
        let randomNum = Math.floor(Math.random() * 9 + 1);
        array.push(randomNum);
        if (array.indexOf(randomNum) < array.lastIndexOf(randomNum)) {
            array.pop()
        }
    }
    return array;
}

while (sudoku.length <= 8) {
    sudoku.push(populateSudoku());
}

for (let i = 0; i < sudoku.length; i++) {
    for (let j = 0; j < sudoku.length; j++) {
        sudoku[i].forEach(element => {
            if (sudoku[i].indexOf(element) === sudoku[j].indexOf(element) &&
                (i !== j)) {
                sudoku[j][sudoku[i].indexOf(element)] = 0;
            }
        })
    }
}

let array = [];

for (let i = 0; i <= 2; i++) {
    for (let j = 0; j <= 2; j++) {
        array.push(sudoku[i][j]);
    }
}

array[3] = 452345;

console.log(sudoku);

**

# Я сделал это! #

**

let array = [[1, 2, 3], [7, 4, 1], [2, 4, 3]];

// checks for duplicates just in first and second item of every file
for (let i = 0; i <= 1; i++) {
    for (let j = 0; j <= 2; j++) {
        array[i].forEach((element, index) => {
            if ((i !== j) && index <= 1 &&
            (array[j].indexOf(element) >= 0 && array[j].indexOf(element) <= 1)) {
                array[i][index] = 'x';
            }
        })
    }
}

console.log(array);

Ответы [ 5 ]

1 голос
/ 15 марта 2020

Если я правильно понял, вы хотели бы изменить исходный массив на:

[[1, 2], [4, 5], [7, 8]]

Если это так, это будет сделано:

array.forEach(element => element.splice(2))
0 голосов
/ 16 марта 2020
let array = [[1, 2, 3], [7, 4, 1], [2, 4, 3]];

console.log(array);

// checks for duplicates just in first and second item of every file
for (let i = 0; i <= 1; i++) {
    for (let j = 0; j <= 2; j++) {
        array[i].forEach((element, index) => {
            if ((i !== j) && index <= 1 &&
            (array[j].indexOf(element) >= 0 && array[j].indexOf(element) <= 1)) {
                array[i][index] = 'x';
            }
        })
    }
}

console.log(array);
0 голосов
/ 15 марта 2020

Использование flatMap и разрушение.

let array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];

let arrayCop = array.flatMap(([first, second]) => [first, second]);

console.log(arrayCop)
0 голосов
/ 15 марта 2020

ORIGINAL

Мне нужно перебрать первый и второй элемент каждого вложенного массива и обновить изменения в исходном массиве

function iterate(array) {
    array.forEach(function(element, index) {
        console.log('[' + index + "][0]", element[0]);
        console.log('[' + index + "][1]", element[1])
    })
}

Не уверен, что Вы подразумеваете под обновлением изменения исходного массива, хотя ...

РЕДАКТИРОВАТЬ

Хорошо, после просмотра других ответов, я считаю, @ NinaW получил то, что вы искали для.

function parse(array) {
    array.forEach(function(element) { element.slice(0, 2) })
}
0 голосов
/ 15 марта 2020

Вы можете использовать функцию Array.prototype.map

...