Объединить два массива по разным индексам в javascript

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

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

arr2 = ['2', '5']

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

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
1 150
5

Ответы 5

Итерируйте 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);

Не лучший способ. Но самый понятный!

Wimanicesir 12.11.2018 17:16

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

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++;
}



}

Другие вопросы по теме