我要编辑JavaScript对象。
我有一个像这样的JavaScript对象
data_without_id = [
0: {id: 1, name: "Mary", age: null}
1: {id: 2, name: "Bob", age: 33}
2: {id: 1, name: "Kelly", age: 40}
]
我想将此对象转换为此
data_without_id = [
0: {id: 1, name: "Kelly", age: 40}
1: {id: 2, name: "Bob", age: 33}
]
我需要做的是:
按id
分组
获取最新价值。
我尝试使用Array.prototype.reduce()
,但无法获得所需的结果...
答案 0 :(得分:1)
使用功能reduce
如下:
用于分组的函数reduce
和用于提取值的函数Object.values
。
let data_without_id = [ { id: 1, name: "Mary", age: null }, { id: 2, name: "Bob", age: 33 }, { id: 1, name: "Kelly", age: 40 }],
result = Object.values(data_without_id.reduce((a, {id, name, age}) => {
a[id] = {id, name, age};
return a;
}, Object.create(null)));
console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
您可以通过使累加器成为具有.reduce
键的对象来使用id
。这样,您可以覆盖所有先前看到的具有相同id
的对象,然后使用Object.values
获取对象数组:
const data_without_id = [{id: 1, name: "Mary", age: null}, {id: 2, name: "Bob", age: 33}, {id: 1, name: "Kelly", age: 40}],
res = Object.values(data_without_id.reduce((acc, obj) =>
(acc[obj.id] = obj, acc)
, {}));
console.log(res);
答案 2 :(得分:0)
您可以简单地使用for/of
循环来创建数据的副本,其中最后一个具有特定ID的对象将始终是输出数据中返回的对象。这样可以避免代码的“分组”部分,但仍返回正确的数据。
const data_without_id = [
{ id: 1, name: "Mary", age: null },
{ id: 2, name: "Bob", age: 33 },
{ id: 1, name: "Kelly", age: 40 }
];
function lastId(arr) {
const out = [];
for (let obj of arr) {
// If you don't create a copy of each object the returned
// data will simply be contain _references_ to the original
// data. Changes in the original data will be reflected
// in the returned data
out[obj.id - 1] = { ...obj };
}
return out;
}
const lastIds = lastId(data_without_id);
console.log(lastIds);