Вложенный цикл JavaScript не работает должным образом - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь изменить значения в определенной позиции многомерного массива (три уровня), используя вложенные циклы, но я не могу заставить его работать должным образом.

КакВы увидите в коде ниже, мой массив начинается с трех массивов, и каждый из этих трех массивов имеет два массива. Я пытаюсь изменить второе значение каждого из «более глубоких» массивов, но новое значение будет отличаться в зависимости от того, какой из массивов среднего уровня содержит этот более глубокий массив.

ЭтоВот как начинается массив:

[[['A','X'],['B','X']],
 [['C','X'],['D','X']],
 [['E','X'],['F','X']]]

Я пытаюсь изменить 'X'. Первые два exe находятся в одном и том же массиве массивов, поэтому они получат одинаковый вывод - и так далее. Это желаемый результат:

[[['A','Output 1'],['B','Output 1']],
 [['C','Output 2'],['D','Output 2']],
 [['E','Output 3'],['F','Output 3']]]

Вот что у меня есть до сих пор:

var myArray = [
  [
    ['A', 'X'],
    ['B', 'X']
  ],
  [
    ['C', 'X'],
    ['D', 'X']
  ],
  [
    ['E', 'X'],
    ['F', 'X']
  ]
];
var firstOutput = 1;

for (i = 0; i < 3; i++) {
  for (j = 0; j < 2; j++) {
    myArray[i][j][1] = 'Output ' + firstOutput;
  }
  firstOutput = firstOutput + 1;
}

console.log(myArray);

Однако, вместо того, чтобы получить желаемый результат, я на самом деле получаю следующее:

[[['A','Output 3'],['B','Output 3']],
 [['C','Output 3'],['D','Output 3']],
 [['E','Output 3'],['F','Output 3']]]

Таким образом, вместо получения Вывода 1 дляпервый массив, вывод 2 для второго и 3 для третьего, каждый раз я получаю вывод 3.

Если бы кто-нибудь мог помочь мне в получении того результата, который я ищу, я быочень благодарен.

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Попробуйте это:

var myArray = [
  [
    ['A', 'X'],
    ['B', 'X']
  ],
  [
    ['C', 'X'],
    ['D', 'X']
  ],
  [
    ['E', 'X'],
    ['F', 'X']
  ]
];

let itemIndex = 1;
var newArray = [];
myArray.map((item) => {
	var arr = [];
	item.map((elem) => {
    elem[1] = 'Output ' + itemIndex;
    arr.push(elem);
  });
  newArray.push(arr);
 	itemIndex = itemIndex + 1;
});

console.log(newArray);
0 голосов
/ 23 октября 2019

Вот что я сделал для каждого:

  var arr = [
    [["A", "X"], ["B", "X"]],
    [["C", "X"], ["D", "X"]],
    [["E", "X"], ["F", "X"]]
  ];
  var count = 1
  var newArray = []
  arr.forEach(array => {
    var a = []
    array.forEach(arr => {
      arr[1] = "Output " + count
      a.push(arr)
    })
    count++
    newArray.push(a)
  })
  console.log(newArray)
...