Доступ к вложенным массивам в функциях Javascript - PullRequest
1 голос
/ 27 апреля 2019

У меня есть функция, которая принимает массив массивов и два входных значения. Функция должна возвращать массив, содержащий всю эту информацию; однако, когда к третьему уровню массивов обращаются, он копирует значение «undefined» вместо фактического массива, который там находится.

Я также попытался передать копию массива вместо исходной ссылки, но возникает та же проблема.

function relation(list, x, y){
    var x = [list, x, y];
    return x;
}

Попытка с использованием функции копирования:

function copy(list){
    var newList = [];
    for (var i = 0; i < list.length; i++){
        if (Array.isArray(list[i])){
        newList[i] = list[i].slice();
    }
        else newList[i] = list[i];
    }
    return newList;
}

function relation(copy(list), x, y){
    var x = [list, x, y];
    return x;
}

Независимо от того, какая версия отношения () используется, вызывая функцию

var x = [0, [0, [0, 1, 2] ] ];

var y = relation(x, 5, 10);
console.log(y); 

должно быть

[ [ 0, [ 0, [0, 1, 2] ] ], 5, 10]

Но на самом деле возвращает

[ [ 0, [ 0, [Array] ] ], 5, 10]

Аналогично, при попытке доступа к элементам в самом внутреннем массиве:

console.log(y[0][0][0]);

функция возвращает неопределенное значение.

Есть ли простой способ скопировать этот самый внутренний массив?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

Для поверхностной копии массива используйте оператор распространения: ...

let copy = [...array]

Кстати, помните, как вы назначаете свои переменные: var x = [list, x , y];

var nested = [0, [0, [0, 1, 2] ] ];

function notMuchChanged(array, x, y){
  let outerArray = [];
  let copyArray = [...array];
  outerArray.push(copyArray);
  outerArray.push(x);
  outerArray.push(y);
  return outerArray;
}

console.log(JSON.stringify(notMuchChanged(nested, 5, 10)));
0 голосов
/ 27 апреля 2019

Просто используйте console.log(JSON.stringify(y)), и вы поймете, что все работает, как вы ожидали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...