根据javascript中的条件在数组中插入具有相同键值的多个对象

2024-04-17

例如,我有一个具有多个值的对象

let obj = {
  a: "day1",
  b: "",
  c: "day3",
  aa: 10,
  bb: 11,
  cc: 12,
}
let data = {};
let item = [];
for (let i in obj) {
  if (i === 'a') {
    data["title"] = obj.a;
    data['value'] = obj.aa;
  }
  if (i === 'b') {
    data["title"] = obj.b;
    data['value'] = obj.bb;
  }
  if (i === 'c') {
    data["title"] = obj.c;
    data['value'] = obj.cc;
  }
  item.push(data);
}
console.log(item)

但我多次只得到最后一天的值。

item [
        {title:"day3",value:12},
        {title:"day3",value:12},
{title:"day3",value:11}
        ]

我想要以下格式

item [
    {title:"day1",value:10},
    {title:"day3",value:11}
    ]

请帮忙,提前致谢。


从上面的评论来看...

“当然,OP 会获取最后的状态,因为 OP 总是重新分配相同的属性(title and value)同时data目的。 OP想要使用一个数组并在/每次新创建时推送data对象进入其中。”

Peter Seliger 你能给我任何解决方案的例子吗 – omkar p

const obj = {
  a: "day1",
  b: "",
  c: "day3",
  aa: 10,
  bb: 11,
  cc: 12,
}
const items = [];

// slightly fixed OP approach.
for (const key in obj) {
  if (key === 'a') {
    items.push({
      title: obj.a,
      value: obj.aa,
    });
  }
  if (key === 'b') {
    items.push({
      title: obj.b,
      value: obj.bb,
    });
  }
  if (key === 'c') {
    items.push({
      title: obj.c,
      value: obj.cc,
    });
  }
}
console.log({ items });

// or entirely generic/configurable and maybe even more expressive ...
console.log(
  Object
    .entries(obj)
    .reduce(({ target, valueMap, result }, [key, value]) => {

      if (key in valueMap) {
        result.push({
          title: value,
          value: target[valueMap[key]],
        });
      }
      return { target, valueMap, result };
    }, {
      target: obj,
      valueMap: { a: 'aa', b: 'bb', c: 'cc' },
      result: [],

    }).result
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据javascript中的条件在数组中插入具有相同键值的多个对象 的相关文章

随机推荐