【发布时间】:2019-06-23 23:56:44
【问题描述】:
var array = ['odd', 'odd', 2, 8, 'odd', 4];
var oddArr = [1, 3, 5];
如何用oddArr中的元素替换数组中的'odd',以便
var newArr = [1, 3, 2, 8, 5, 4];
?
【问题讨论】:
-
odd定义为什么?
标签: javascript arrays
var array = ['odd', 'odd', 2, 8, 'odd', 4];
var oddArr = [1, 3, 5];
如何用oddArr中的元素替换数组中的'odd',以便
var newArr = [1, 3, 2, 8, 5, 4];
?
【问题讨论】:
odd 定义为什么?
标签: javascript arrays
循环遍历数组,如果找到 odd 将其替换为 oddArr 中的元素,使用 array.shift()
const array = ['odd', 'odd', 2, 8, 'odd', 4];
const oddArr = [1, 3, 5];
const result = array.map(e => e === 'odd' ? oddArr.shift() : e)
console.log(result)
【讨论】:
oddArr。有些人可能不期望或不想要这个后置条件。
result 将有undefined 条目。对于调用 this 的这种无效前提条件,这是可以接受的行为。
您可以使用map 和这样的索引变量:
var array = ["odd", "odd", 2, 8, "odd", 4];
var oddArr = [1, 3, 5];
let currentIndex = 0;
const newArray = array.map(a => a === 'odd' ? oddArr[currentIndex++] : a)
console.log(newArray)
【讨论】:
map,但这很有意义。)
您可以关闭索引,而无需更改 oddArr。
const
array = ['odd', 'odd', 2, 8, 'odd', 4],
oddArr = [1, 3, 5],
result = array.map((i => v => v === 'odd' ? oddArr[i++] : v)(0));
console.log(result);
【讨论】:
(i=> array.map(v => v === 'odd' ? oddArr[i++] : v))(0)
你可以用一个简单的循环来做到这一点:
var array = ["odd", "odd", 2, 8, "odd", 4];
var oddArr = [1, 3, 5];
var result = [], i = 0;
array.forEach(function(x) {
if (x === "odd") {
result.push(oddArr[i]);
i++;
}
else {
result.push(x);
}
});
console.log(result);
(请注意,我已将odd 替换为字符串"odd",如果odd 是一个实变量,那么您可以在上面的代码中使用它。)
【讨论】:
odd 应该包含在'' 中。
var array = ['odd', 'odd', 2, 8, 'odd', 4];
var oddArr = [1, 3, 5];
//lopping through array
for(let i = 0;i<array.length;i++){
//check if item at i is odd
if(array[i] === 'odd'){
//oddArr.shift() returns the first element and also removes it.
array[i] = oddArr.shift();
}
}
console.log(array);
【讨论】:
使用 forEach() 循环遍历数组,并通过从oddArr 中交叉一个来更改奇数值,并创建索引计数器 (x),如下所示
var array = ["odd","odd", 2, 8, "odd", 4];
var oddArr = [1, 3, 5];
var x=0;
array.forEach(function(v,i){
if(array[i]=="odd")
{array[i]=oddArr[x]; x++;}
});
console.log(array);
【讨论】: