我需要将条件语句应用到对象项数组的每次迭代中,而不需要使用for循环或任何类型的涉及定义索引变量的循环。 这可以通过映射或过滤器实现吗?
下面是一个包含for循环的示例。
const objectArray = [{key: 1}, {key: 2}, {key: 3}, {key: 4}, {key: 5}]
let currentKey = 3
for(i=0;i<objectArray.length;i++) {
if(objectArray[i].key === currentKey) {
objectArray[i].key = 0
}
}
> console.log(objectArray)
[{key: 1}, {key: 2}, {key: 0}, {key: 4}, {key: 5}]
如果没有for循环,我如何才能实现这一点。
谢谢
map
和filter
的组合将是一个优雅的解决方案:
null
const objectArray = [{key: 1}, {key: 2}, {key: 3}, {key: 4}, {key: 5}]
let currentKey = 3
objectArray.filter((e) => e.key === currentKey).map((e) => e.key = 0);
console.log(objectArray)
如果修改现有数组是可以的(即inplace),您可以简单地使用。find():
null
const objectArray = [{key: 1}, {key: 2}, {key: 3}, {key: 4}, {key: 5}]
let currentKey = 3
function replaceKey(arr, keyId, replacmentId) {
const element = arr.find(element => element.key === keyId);
if(element) {
element.key = replacmentId;
}
}
replaceKey(objectArray, currentKey, 0);
console.log(objectArray);
您可以使用map函数。 这可以转换对象并返回它。
如果您不担心可能的内存调整或重新分配的对象值,可以使用:
const objectArray = [{key: 1}, {key: 2}, {key: 3}, {key: 4}, {key: 5}]
const currentKey = 3
const result = objectArray.map((item)=>{
if(item.key === currentKey)
item.key = 0;
return item;
});
console.log(result);