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

如何在JavaScript中根据数组匹配设置对象数组的status属性

解决对象数组匹配普通数组设置状态的问题

需求:将对象数组arrObj中name属性与普通数组arr内元素匹配的对象的status设为true,不匹配的设为false,期望输出格式如下:

[
    { name: "Test1", status: true }, 
    { name: "Test2", status: false }, 
    { name: "Test3", status: true }
]

原代码问题分析

你的代码存在两处关键错误:

  1. 直接访问arrObj.name和arrObj.status,但arrObj是数组而非单个对象,无法正确获取每个元素的属性
  2. 仅处理了匹配的情况,未覆盖不匹配的对象,无法将这些对象的status设为false

正确解法

基础实现(直接修改原数组)

遍历arrObj中的每个对象,利用includes()判断当前对象的name是否在arr中,直接更新status:

let arrObj = [
  { name: "Test1", status: true },
  { name: "Test2", status: true },
  { name: "Test3", status: true }
];

let arr = ["Test1", "Test3"];

arrObj.forEach(obj => {
  obj.status = arr.includes(obj.name);
});

console.log(arrObj);

性能优化版(适合大数组场景)

当arr元素较多时,将arr转为Set可以提升查找效率(Set.has()的时间复杂度为O(1),而Array.includes()为O(n)):

let arrObj = [
  { name: "Test1", status: true },
  { name: "Test2", status: true },
  { name: "Test3", status: true }
];

let arr = ["Test1", "Test3"];
const nameSet = new Set(arr);

arrObj.forEach(obj => {
  obj.status = nameSet.has(obj.name);
});

console.log(arrObj);

返回新数组(不修改原数组)

如果需要保留原数组不变,可以使用map()创建并返回新数组:

let arrObj = [
  { name: "Test1", status: true },
  { name: "Test2", status: true },
  { name: "Test3", status: true }
];

let arr = ["Test1", "Test3"];
const nameSet = new Set(arr);

const newArrObj = arrObj.map(obj => ({
  ...obj,
  status: nameSet.has(obj.name)
}));

console.log(newArrObj);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:15:21