You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中匹配数组奖项名称并修改awarded属性的实现方法

解决方案

嘿,这个需求其实很好实现,我给你两种实用的方案,你可以根据自己的场景来选:

方案一:直接修改原数组(高效推荐)

首先,我们可以先把array2里的所有奖项名称提取出来存到一个Set里——因为Set的查找速度非常快,比每次遍历array2去匹配要高效得多,尤其是当数组元素比较多的时候。

然后遍历array1,检查每个奖项的名称是否在这个Set里,如果存在,就把对应的awarded属性改成true。

完整代码示例:

// 你的原始奖项数组
const array1 = [
  { "finished": 1, "awardName": "The beginning", "description": "Complete one excersise", "difficulty": "easy", "awarded": false },
  { "finished": 5, "awardName": "Five of a kind", "description": "Complete five excersises", "difficulty": "medium", "awarded": false },
  // 其他奖项...
];

// 已授予的奖项数组
const array2 = [
  { "award": "Five of a kind" },
  { "award": "The beginning" },
  { "award": "firstTimeLogin" }
];

// 把已授予的奖项名称提取到Set中
const awardedAwardNames = new Set(array2.map(item => item.award));

// 遍历更新array1的awarded属性
array1.forEach(award => {
  if (awardedAwardNames.has(award.awardName)) {
    award.awarded = true;
  }
});

// 打印结果看看
console.log(array1);

运行这段代码后,array1里的"The beginning"和"Five of a kind"对应的awarded都会变成true,而"firstTimeLogin"因为不在array1里,所以不会产生任何影响。

方案二:返回新数组(不修改原数据)

如果你不想改动原来的array1,而是希望得到一个新的数组,可以用map方法来创建新对象:

const awardedAwardNames = new Set(array2.map(item => item.award));

// 生成新数组,不修改原array1
const updatedArray1 = array1.map(award => ({
  // 复制原对象的所有属性
  ...award,
  // 重新设置awarded属性
  awarded: awardedAwardNames.has(award.awardName)
}));

console.log(updatedArray1);

这个方案会返回一个全新的数组,原array1的内容不会被改变,适合需要保留原始数据的场景。

内容的提问来源于stack exchange,提问作者petar11199

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:01:35