javascript - 在 Javascript 数组中排列一个重复对象以生成一个值

标签 javascript data-structures ecmascript-6

我正在尝试排列我当前的对象,如下所示

var myValues = [
{
    client: "FIRE",
    firstname: "Test",
    id: "test@fire.com",
    arrangeid: "FIREFOX",
    region: "FOP",
    secondname: "Testy",
    status: "Approved"
},
{
    client: "FIRE",
    firstname: "Test",
    id: "test@fire.com",
    arrangeid: "BUZZZZZZ",
    region: "FOP",
    secondname: "Testy",
    status: "Approved"
},
{
    client: "PANTER",
    firstname: "Panty",
    id: "panty@panter.com",
    arrangeid: "PANTER",
    region: "PAN",
    secondname: "mc panty",
    status: "Approved"
},
{
    client: "BAT",
    firstname: "Bruce",
    id: "bat@bat.com",
    arrangeid: "BLACKBAT",
    region: "BLK",
    secondname: "Wyne",
    status: "Approved"
}

]

所以我得到了这个对象,前两个ID是相同的,但它们有不同的arrangeid。我希望能够加入他们,将他们聚集在一起。对象看起来像这样:

    var myValues = [
{
    client: "FIRE",
    firstname: "Test",
    id: "test@fire.com",
    arrangeid: ["BUZZZZZZ", "FIREFOX"],
    region: "FOP",
    secondname: "Testy",
    status: "Approved"
},
{
    client: "PANTER",
    firstname: "Panty",
    id: "panty@panter.com",
    arrangeid: ["PANTER"],
    region: "PAN",
    secondname: "mc panty",
    status: "Approved"
},
{
    client: "BAT",
    firstname: "Bruce",
    id: "bat@bat.com",
    arrangeid: ["BLACKBAT"],
    region: "BLK",
    secondname: "Wyne",
    status: "Approved"
}

]

我有一个jsfidle here ,我在那里得到了一个结果。能不能做得更好、更干净。我是否正确地对待它?

最佳答案

您可以使用reduce , Object.values() spread syntax像这样:

var myValues = [{client:"FIRE",firstname:"Test",id:"test@fire.com",arrangeid:"FIREFOX",region:"FOP",secondname:"Testy",status:"Approved"},{client:"FIRE",firstname:"Test",id:"test@fire.com",arrangeid:"BUZZZZZZ",region:"FOP",secondname:"Testy",status:"Approved"},{client:"PANTER",firstname:"Panty",id:"panty@panter.com",arrangeid:"PANTER",region:"PAN",secondname:"mc panty",status:"Approved"},{client:"BAT",firstname:"Bruce",id:"bat@bat.com",arrangeid:"BLACKBAT",region:"BLK",secondname:"Wyne",status:"Approved"}];

const merged = myValues.reduce((acc, a) => {
  acc[a.client] = acc[a.client] || { ...a, arrangeid: [] };
  acc[a.client].arrangeid.push(a.arrangeid);
  return acc;
},{})

const output = Object.values(merged);
console.log(output)

累加器是一个对象,以每个唯一的客户端作为其键,以便更容易对它们进行分组。

{
  "FIRE": {
    "client": "FIRE",
    "firstname": "Test",
    "id": "test@fire.com",
    "arrangeid": [ "FIREFOX", "BUZZZZZZ" ],
    "region": "FOP",
    "secondname": "Testy",
    "status": "Approved"
  },
  "PANTER": {
    "client": "PANTER",
    "id": "panty@panter.com",
    "arrangeid": [
      "PANTER"
    ],
   ...
  }
  ...
}

关于javascript - 在 Javascript 数组中排列一个重复对象以生成一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55031069/

相关文章:

javascript - 返回 jquery 数据表中的输入

javascript - 为什么输入更改后提交状态没有立即更新?

python - 从给定的路径列表中获取文件夹的结构作为字符串

javascript - js如何简洁实现map[index]++

javascript - 使默认值适用于对象参数的各个字段

javascript - 在相似的 div 中选择特定的 div

javascript - SVG:获取元素相对于页面的位置

c - 删除堆栈给定索引处的元素,该索引是堆栈链表的一部分

c - 用于基本数据结构的库,例如 C 中的队列

Javascript "for of"在 IE 11 中失败