Javascript как объединять массивы так, чтобы индексы исходных элементов в обоих массивах оставались одинаковыми - PullRequest
0 голосов
/ 05 июля 2018

Как можно объединить массивы в JS, чтобы индексы исходных элементов в обоих массивах оставались одинаковыми?

Кажется, что распространяемый массив не делает то, что мне нужно:

let testArray: Array<any> = [];
testArray[4] = 'test4';
testArray[2] = 'test2';
testArray[15] = 'test15';

let otherTestArray = [];
otherTestArray[3] = 'test3';
otherTestArray[5] = 'test5';
console.log(testArray);

let testar = [...testArray, ...otherTestArray];
console.log(testar);


2:"test2"
4:"test4"
15:"test15"
19:"test3"
21:"test5"

Проблема индексов для элементов в новом массиве, была изменена.

Так, как мы можем решить эту проблему эффективно?

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Вы можете взять Object.assign и массив в качестве цели.

let testArray = [];
testArray[4] = 'test4';
testArray[2] = 'test2';
testArray[15] = 'test15';

let otherTestArray = [];
otherTestArray[3] = 'test3';
otherTestArray[5] = 'test5';
console.log(testArray);

let testar =  Object.assign([], testArray, otherTestArray);
console.log(testar);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 05 июля 2018

Вы можете перебирать каждое игнорирующее неопределенное значение и назначать значение другому массиву в той же позиции ...

let testArray = [];
testArray[4] = 'test4';
testArray[2] = 'test2';
testArray[15] = 'test15';
//console.log(testArray);

let otherTestArray = [];
otherTestArray[3] = 'test3';
otherTestArray[5] = 'test5';
//console.log(otherTestArray);

let result = [];
for (var arr of [testArray, otherTestArray]){
  console.log(arr.length);
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] !== void(0)) // ignore undefined values
      result[i] = arr[i];
  }
}

console.log(result);
0 голосов
/ 05 июля 2018

Разреженные массивы - довольно плохая идея в целом, но если у вас есть для этого, вы можете использовать Object.assign:

let testArray = [];
testArray[4] = 'test4';
testArray[2] = 'test2';
testArray[15] = 'test15';

let otherTestArray = [];
otherTestArray[3] = 'test3';
otherTestArray[5] = 'test5';

const finalArr = Object.assign([], testArray, otherTestArray);
console.log(finalArr);

// (16) [empty × 2, "test2", "test3", "test4", "test5", empty × 9, "test15"]
...