Concat двух массивов по разным индексам в JavaScript - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть два массива:

arr1 = ['1', 'x', '0', 'x']

arr2 = ['2', '5']

Я хочу заменить 'x' в первом массиве числами во втором массиве в точном порядке, чтобы я мог получить что-то вроде этого:

arr3 = ['1', '2', '0', '5']

Понятия не имею, с чего начать. Я пробовал с concat () и slice (), но безрезультатно.

Ответы [ 5 ]

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

Лучше использовать forloop, чем map, потому что он быстрее, если у вас большие массивы

Пример:

var arr1 = ['1', 'x', '0', 'x'];
    
var arr2 = ['2', '5'];

var counter = 0;
for(int i = 0; i < arr1.length; i++){

if(arr1[i] === 'x'){
  arr1[i] = arr2[counter];
  counter++;
}



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

Если оба массива всегда в правильном порядке, это тривиально:

var arr3 = arr1.map(item => item === 'x' ? arr2.shift() : item);
0 голосов
/ 12 ноября 2018

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

var array1 = ['1', 'x', '0', 'x'],
    array2 = ['2', '5'],
    result = array1.map((i => v => v === 'x' ? array2[i++] : v)(0));
    
console.log(result);
0 голосов
/ 12 ноября 2018

Вы можете сделать что-то вроде этого

var arr1 = ['1', 'x', '0', 'x'];

var arr2 = ['2', '5'];

for(var i = 0; i < arr1.length; i++) {
  if (arr1[i] == "x") {
    arr1[i] = arr2[0];// replace 
    arr2.shift(); // delete first element
  }
}

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

Итерируйте arr1 с Array.map() и используйте внешний счетчик.Когда значение равно 'x', используйте значение counter для получения значения из arr2 и увеличьте значение счетчика:

const arr1 = ['1', 'x', '0', 'x']

const arr2 = ['2', '5']

let counter = 0;
const result = arr1.map(c => c === 'x' ? arr2[counter++] : c);

console.log(result);

Если вы можете изменить arr2, вы можете использовать shift, чтобы получить предмет вместо счетчика:

const arr1 = ['1', 'x', '0', 'x']

const arr2 = ['2', '5']

const result = arr1.map(c => c === 'x' ? arr2.shift() : c);

console.log(result);
...