我不确定是否曾经问过这个问题,但这是交易-
假设有两个arrays
var arrOne = ['Q', '_', 'E', 'R', '_', 'Y'];
var arrTwo = ['W', 'Y'];
如何用_
的元素替换arrOne
的空白 arrTwo
?
输出应是一个数组 -
['Q', 'W', 'E', 'R', 'Y', 'Y']
答案 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);
答案 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);