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

如何反转JavaScript对象数组中的布尔值并提取反转后为True的键?

问题分析与解决

你的代码没生效主要有三个原因:

  1. 修改的是局部变量而非原对象属性:在forEach的解构逻辑中,value是布尔值的副本,修改它不会影响原对象里的属性,必须直接操作obj[key]才能修改原数据。
  2. 只处理了false转true,没完成反转:反转需要把true改成false、false改成true,你只处理了前者。
  3. 缺少提取反转后为true的键的逻辑:原代码完全没做这部分处理。

下面是两种解决方案,按需选择:

方案1:不修改原数组,生成新结果(推荐)

这种方式保留原数据,返回包含反转后属性和目标键的新数组:

const processedData = data.map(item => {
  const reversedObj = { rdd: item.rdd };
  const trueKeys = [];

  Object.entries(item).forEach(([key, value]) => {
    if (key === 'rdd') return; // 跳过非布尔类型的rdd字段
    const reversedVal = !value;
    reversedObj[key] = reversedVal;
    if (reversedVal) trueKeys.push(key);
  });

  return {
    ...reversedObj,
    trueKeysAfterReverse: trueKeys
  };
});

console.log(processedData);

方案2:直接修改原数组,同时收集目标键

如果需要直接修改原数据,可使用此方式:

const trueKeysCollection = [];

data.forEach(item => {
  const keys = [];
  for (const key in item) {
    if (key === 'rdd') continue;
    // 反转布尔值并更新原对象
    item[key] = !item[key];
    // 收集反转后为true的键
    if (item[key]) keys.push(key);
  }
  trueKeysCollection.push({ rdd: item.rdd, trueKeys: keys });
});

console.log('修改后的原数组:', data);
console.log('每个对象反转后为true的键:', trueKeysCollection);

原代码修正版

如果只是想修正你原来的代码,让它能完成布尔值反转:

console.log('原数组:', data);

data.forEach(obj => {
  Object.entries(obj).forEach(([key, value]) => {
    if (key !== 'rdd') {
      // 直接修改原对象的属性,完成反转
      obj[key] = !value;
    }
  });
});

console.log('反转后的数组:', data);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:09:29