问题描述
我有如下所示的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,billNumber:"123"},{id:2,billNumber:"123"}],"12345":[ {id:3,billNumber:"12345"},billNumber:"12345"}],"12334535":[{id:3,billNumber:"12334535"}]
}
如何从json结果中获取上述列表。请帮忙
解决方法
您不需要lodash来做到这一点:只需执行常规的Array.prototype.reduce
就可以了。在每次迭代中,您只需检查当前项目的billNumber
是否在对象中:
- 如果不是(即新条目),则为数组分配单个元素
- 如果是(例如,以前遇到过
billNumber
),那么您只需将其推入数组
请参见下面的概念验证:
const data = [{
id: 1,Name: "test",billNumber: "123"
},{
id: 2,Name: "test1",{
id: 3,Name: "test2",billNumber: "12345"
},Name: "test3",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);
,
使用groupBy
中的lodash
:
const result = groupBy(input,"billNumber")
(input
是您的数组)
您可以使用reduce
方法。
[
{id:1,Name:"test",billNumber:"123"},{id:2,Name:"test1",{id:3,Name:"test2",billNumber:"12345"},Name:"test3",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 } ]
}
谢谢,希望对您有所帮助!