如何根据指定的元素索引替换数组中的元素?
问题的出现原因:如何根据特定元素的索引在数组中替换元素?
解决方法:遍历数组,如果找到奇数,则使用数组的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数组。有些人可能不希望或不期望这种后置条件。
如果奇数的数量超过奇数数组的长度,那么结果数组将会有undefined的元素。对于调用这个方法的无效前置条件,这种行为是可以接受的。
问题的原因是需要将数组中特定索引位置的元素替换为另一个数组中对应索引位置的元素。在给定的代码中,使用了闭包的方式来实现这个目标,避免了对原始数组进行修改。
解决方法是使用map()
方法对原始数组进行遍历,并使用闭包来获取索引值。如果当前遍历到的元素等于'odd',则从另一个数组中取出对应索引位置的元素进行替换。最终得到的结果是替换完成后的新数组。
下面是给定的代码实现这个解决方法:
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)
问题的出现原因是需要在数组中的特定索引位置替换元素。通过使用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函数实现,但这个解决方法非常合理。)