如何根据打字稿中的特定键将数据推送到同一对象中

How to push data into an same object based on specific key in typescript

我有一个如下的 jason 结果,我想从中读取并推送到特定的键,如下所示 JSON 结果

[
{id:1,Name:"test",billNumber:"123"}
{id:2,Name:"test1",billNumber:"123"}
{id:3,Name:"test2",billNumber:"12345"}
{id:2,Name:"test3",billNumber:"12345"}
{id:3,Name:"test4",billNumber:"12334535"}
]

我想要数组列表如下

{
"123":[{id:1,Name:"test",billNumber:"123"}, {id:2,Name:"test1",billNumber:"123"}],
"12345":[ {id:3,Name:"test2",billNumber:"12345"},{id:2,Name:"test3",billNumber:"12345"}],
"12334535":[{id:3,Name:"test4",billNumber:"12334535"}]
}

如何从 json 结果中得到上面的列表。请帮忙

使用 lodash 中的 groupByconst result = groupBy(input, "billNumber")input 是你的数组)

你不需要 lodash 来做到这一点:只需一个普通的 Array.prototype.reduce 就可以完成这项工作。在每次迭代中,您只需检查当前项目的 billNumber 是否在对象中:

  • 如果不是(即新条目),则分配一个包含单个元素的数组
  • 如果是(即之前遇到过billNumber),那么你直接压入数组

见下文proof-of-concept:

const data = [{
  id: 1,
  Name: "test",
  billNumber: "123"
}, {
  id: 2,
  Name: "test1",
  billNumber: "123"
}, {
  id: 3,
  Name: "test2",
  billNumber: "12345"
}, {
  id: 2,
  Name: "test3",
  billNumber: "12345"
}, {
  id: 3,
  Name: "test4",
  billNumber: "12334535"
}];

const transformedData = data.reduce((acc, cur) => {
  if (cur.billNumber in acc) {
    acc[cur.billNumber].push(cur);
  } else {
    acc[cur.billNumber] = [cur];
  }

  return acc;
}, {});
console.log(transformedData);

你可以使用reduce方法。

[
{id:1,Name:"test",billNumber:"123"},
{id:2,Name:"test1",billNumber:"123"},
{id:3,Name:"test2",billNumber:"12345"},
{id:2,Name:"test3",billNumber:"12345"},
{id:3,Name:"test4",billNumber:"12334535"},
].reduce((acc, value) => {
    if (!acc[value.billNumber]) {
        acc[value.billNumber] = [];
    }
    
    acc[value.billNumber].push(value);
    return acc;
}, {})

这是模拟代码您可以使用并获得帮助

var a = [{a:2},{a:3},{a:4}]

let b = {}
let c = 1
a.forEach(obj => {
  b[c] = [obj]
  c++
})

输出将是

{ 
  1: [ { a: 2 } ],
  2: [ { a: 3 } ], 
  3: [ { a: 4 } ] 
}

谢谢,希望对您有所帮助!