如何编辑对象数组?

时间:2019-02-25 02:10:57

标签: javascript arrays

我要编辑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}
                  ]

我需要做的是:

  1. id分组

  2. 获取最新价值。

我尝试使用Array.prototype.reduce(),但无法获得所需的结果...

3 个答案:

答案 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);