用JavaScript中另一个数组的元素替换一个数组的某些特定项

时间:2019-02-01 19:57:05

标签: javascript arrays

我不确定是否曾经问过这个问题,但这是交易-

假设有两个arrays

var arrOne = ['Q', '_', 'E', 'R', '_', 'Y'];
var arrTwo = ['W', 'Y'];

如何用_的元素替换arrOne的空白 arrTwo

输出应是一个数组 -

['Q', 'W', 'E', 'R', 'Y', 'Y']

6 个答案:

答案 0 :(得分:3)

您可以使用index并使用map来获得一个新数组,如下所示:

var arrOne = ['Q', '_', 'E', 'R', '_', 'Y'];
var arrTwo = ['W', 'Y'];

let index = 0;
const newArray = arrOne.map(a => a === "_" ? arrTwo[index++] : a)

console.log(newArray)

如果您满意arrTwo每次替换时都删除其值,则可以使用shift

var arrOne = ['Q', '_', 'E', 'R', '_', 'Y'];
var arrTwo = ['W', 'Y'];

const newArray = arrOne.map(a => a === "_" ? arrTwo.shift() : a)

console.log(newArray)

如果要更新原始数组本身中的值(突变):

var arrOne = ['Q', '_', 'E', 'R', '_', 'Y'];
var arrTwo = ['W', 'Y'];

arrOne.forEach((a,i) => arrOne[i] = a === "_" ? arrTwo.shift() : a)
console.log(arrOne)

答案 1 :(得分:0)

您可以为此使用forEach循环

var arrOne = ['Q', '_', 'E', 'R', '_', 'Y'];
var arrTwo = ['W', 'Y'];

arrOne.forEach((e) => {
  if (e == '_') {
    arrOne[arrOne.indexOf(e)] = arrTwo[0];
    arrTwo.shift();
  }
})
console.log(arrOne)

答案 2 :(得分:0)

您可以使用while循环

var firstIndex;
var secondIndex = 0;
while ((firstIndex = arrOne.indexOf('_')) >= 0) 
    arrOne[firstIndex] = arrTwo[secondIndex++];

答案 3 :(得分:0)

我不确定期望的结果是什么。

检查这个小提琴:

var arrOne = ['Q', '_', 'E', 'R', '_', 'Y'];
var arrTwo = ['W', 'Y'];
var pos = 0;

arrOne.forEach(function(e, i) {
    if (e == "_") {
    arrOne[i] = arrTwo[pos];
    pos++;

    if (pos > arrTwo.length) {
        pos = 0;
    }
  }
});

console.log(arrOne);

https://jsfiddle.net/4cgxho0L/

答案 4 :(得分:0)

有多种方法可以做到这一点,我想这只是最必要的方法,也许不是更好,但是您会明白这一点,并最终提出一个更好的解决方案,对此我确信。

>

首先让我们看一下代码:

// we initialise our new array
let new_array = [];

var arrOne = ['Q', '_', 'E', 'R', '_', 'Y'];
var arrTwo = ['W', 'Y'];


// we iterate over each element of the arrOne that we know we want to include in
// our new array
arrOne.forEach(elementOfArrOne => {

// we know also that if we encounter an elementOfArrOne that is equal to '_' we 
// want to add all of the elements of arrTwo
   if (element === '_') {
// that is why when we encounter our '_' we iterate over each item of arrTwo
      arrTwo.forEach(elementOfArrTwo => {
// and we push them into our new_array
          new_array.push(elementOfArrTwo);
      });
   } else {
// if the element that we are iterating on is not '_' then we simply push it to our 
// new_array
     new_array.push(elementOfArrOne);
   }
})

编辑:而且,不要害怕尝试一些事情,然后再来这里揭露您的企图。能够看到您的代码得到改进,真是太酷了:)

答案 5 :(得分:0)

您可以关闭索引并在必要时映射替换值。

此解决方案不会更改任何数组。

var arrOne = ['Q', '_', 'E', 'R', '_', 'Y'],
    arrTwo = ['W', 'Y'],
    result = arrOne.map((i => v => v === '_' ? arrTwo[i++] : v)(0));

console.log(result);