【发布时间】:2018-11-12 16:10:10
【问题描述】:
我有两个数组:
arr1 = ['1', 'x', '0', 'x']
arr2 = ['2', '5']
我想用第二个数组中的数字按确切顺序替换第一个数组中的“x”,这样我会得到这样的东西:
arr3 = ['1', '2', '0', '5']
我不知道从哪里开始。我试过 concat() 和 slice() 但没有结果。
【问题讨论】:
标签: javascript arrays concat
我有两个数组:
arr1 = ['1', 'x', '0', 'x']
arr2 = ['2', '5']
我想用第二个数组中的数字按确切顺序替换第一个数组中的“x”,这样我会得到这样的东西:
arr3 = ['1', '2', '0', '5']
我不知道从哪里开始。我试过 concat() 和 slice() 但没有结果。
【问题讨论】:
标签: javascript arrays concat
使用Array.map() 迭代arr1,并使用外部计数器。每当值为'x'时,使用计数器从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);
【讨论】:
您可以映射数组 1 并检查值并通过使用索引的 clsure 在另一个数组的索引处取值。
var array1 = ['1', 'x', '0', 'x'],
array2 = ['2', '5'],
result = array1.map((i => v => v === 'x' ? array2[i++] : v)(0));
console.log(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.log(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++;
}
}
【讨论】: