提问者:小点点

如果数组中的项与另一项匹配而没有循环,则为该项分配新值


我需要将条件语句应用到对象项数组的每次迭代中,而不需要使用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循环,我如何才能实现这一点。

谢谢


共3个答案

匿名用户

mapfilter的组合将是一个优雅的解决方案:

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);