У меня есть два массива:
arr1 = ['1', 'x', '0', 'x']
arr2 = ['2', '5']
Я хочу заменить 'x' в первом массиве числами во втором массиве в точном порядке, чтобы получить что-то вроде этого:
arr3 = ['1', '2', '0', '5']
Понятия не имею, с чего начать. Я пробовал использовать concat () и slice (), но безрезультатно.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Итерируйте arr1 с Array.map() и используйте внешний счетчик. Если значение равно 'x', используйте to 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.info(result);Если вы можете мутировать arr2, вы можете использовать shift для получения элемента вместо счетчика:
const arr1 = ['1', 'x', '0', 'x']
const arr2 = ['2', '5']
const result = arr1.map(c => c === 'x' ? arr2.shift() : c);
console.info(result);Вы можете сопоставить массив 1 и проверить значение и принять значение по индексу для другого массива, используя выражение индекса.
var array1 = ['1', 'x', '0', 'x'],
array2 = ['2', '5'],
result = array1.map((i => v => v === 'x' ? array2[i++] : v)(0));
console.info(result);Вы можете сделать что-то вроде этого
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.info(arr1);
Если оба массива всегда в правильном порядке, это тривиально:
var arr3 = arr1.map(item => item === 'x' ? arr2.shift() : item);
Лучше использовать 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++;
}
}
Не лучший способ. Но самый понятный!