分组或汇总Javascript数组
您好,我想按最高的“order”键对上面的数组进行排序,并返回下面经过过滤的数组。公共密钥是caseID。另外,如果order键为null,则返回它。 我已经搜索和测试了一些函数和循环,但似乎无法得到它。任何帮助都将不胜感激。如果可能的话,我更喜欢es2015。 谢谢大家!分组或汇总Javascript数组,javascript,arrays,json,ecmascript-6,Javascript,Arrays,Json,Ecmascript 6,您好,我想按最高的“order”键对上面的数组进行排序,并返回下面经过过滤的数组。公共密钥是caseID。另外,如果order键为null,则返回它。 我已经搜索和测试了一些函数和循环,但似乎无法得到它。任何帮助都将不胜感激。如果可能的话,我更喜欢es2015。 谢谢大家! var json = [ { id: 11, name:"app1", family:"apps", caseID: 123, order:1 },
var json =
[
{
id: 11,
name:"app1",
family:"apps",
caseID: 123,
order:1
},
{
id: 12,
name:"app1",
family:"apps",
caseID: 123,
order:2
},
{
id: 13,
name:"app1",
family:"apps",
caseID: 123,
order:3
},
{
id: 14,
name:"app2",
family:"tools",
caseID: 129,
order:1
},
{
id: 15,
name:"app2",
family:"tools",
caseID: 129,
order:2
},
{
id: 16,
name:"app3",
family:"utils",
caseID: 120,
order:1
},
{
id: 17,
name:"app3",
family:"utils",
caseID: 120,
order:2
},
id: 18,
name:"app3",
family:"utils",
caseID: 150,
order:null
}
]
你可以试试下面的
方法
//代码在这里
var json=[{“id”:11,“name”:“app1”,“family”:“apps”,“caseID”:123,“order”:1},{“id”:12,“name”:“app1”,“family”:“apps”,“caseID”:123,“order”:3},{“id”:14,“name”:“app2”,“family”:“tools”,“caseID”:129,“order”:1},{“id”:15,“name”:“app2”,“family”:“tools”,“caseID”:129,“order”:2},{“id”:16,“name”:“app3”,“family”:“utils”,“caseID”:120,“order”:1},{“id”:17,“name”:“app3”,“family”:“utils”,“caseID”:120,“order”:2},{“id”:18,“name”:“app3”,“family”:“utils”,“caseID”:150,“order”:null}];
var-map={};
//创建具有最高顺序的唯一案例ID的映射
json.forEach((项目)=>{
if(映射[item.caseID]){
if(映射[item.caseID].orderb.order-a.order);
控制台日志(结果);
您可以尝试以下操作
方法
//代码在这里
var json=[{“id”:11,“name”:“app1”,“family”:“apps”,“caseID”:123,“order”:1},{“id”:12,“name”:“app1”,“family”:“apps”,“caseID”:123,“order”:3},{“id”:14,“name”:“app2”,“family”:“tools”,“caseID”:129,“order”:1},{“id”:15,“name”:“app2”,“family”:“tools”,“caseID”:129,“order”:2},{“id”:16,“name”:app3,“系列”:“utils”,“caseID”:120,“订单”:1},{“id”:17,“名称”:“app3”,“系列”:“utils”,“caseID”:120,“订单”:2},{“id”:18,“名称”:“app3”,“系列”:“utils”,“caseID”:150,“订单”:null}];
var-map={};
//创建具有最高顺序的唯一案例ID的映射
json.forEach((项目)=>{
if(映射[item.caseID]){
if(映射[item.caseID].orderb.order-a.order);
控制台日志(结果);
我将从消除重复开始。您可以使用reduce()来实现这一点
并分配给键入到caseID
的对象。您可以同时避免任何顺序小于您已经看到的顺序的对象。然后您可以根据caseID
获取该散列值,该散列值将是唯一的对象,并像通常一样对它们进行排序。例如:
var json=[{“id”:11,“name”:“app1”,“family”:“apps”,“caseID”:123,“order”:1},{“id”:12,“name”:“app1”,“family”:“apps”,“caseID”:123,“order”:2},{“id”:13,“name”:“apps”,“caseID”:123,“order”:3},{“id”:14,“name”:“app2”,“family”:“tools”,“caseID”:129,“order”:1},{“id”“:15,“名称”:“app2”,“家族”:“工具”,“案例id”:129,“订单”:2},{“id”:16,“名称”:“app3”,“家族”:“utils”,“案例id”:120,“订单”:1},{“id”:17,“名称”:“app3”,“家族”:“utils”,“案例id”:120,“订单”:2},{“id”:18,“名称”:“app3”,“家族”:“utils”,“案例id”:150,“订单”:null},]
//仅获取基于caseID的筛选项
//只挑选最大的
让filtered=json.reduce((a,c)=>{
如果(!a[c.caseID]| a[c.caseID][order']b.order-a.order)
console.log(result)
我将从消除重复开始。您可以使用reduce()
和指定给键入到caseID
的对象来完成此操作。您可以同时避开任何顺序小于您已经看到的顺序的对象。然后,您可以根据caseID
获取该散列的值,该散列将是唯一的对象,并像通常一样对它们进行排序。例如:
var json=[{“id”:11,“name”:“app1”,“family”:“apps”,“caseID”:123,“order”:1},{“id”:12,“name”:“app1”,“family”:“app”,“caseID”:123,“order”:2},{“id”:13,“name”:“apps”,“caseID”:123,“order”:3},{“id”:14,“name”:“app2”,“family”:“tools”,“caseID”:129,“order”:1},{“id”:15,“名称”:“app2”,“家族”:“工具”,“案例id”:129,“订单”:2},{“id”:16,“名称”:“app3”,“家族”:“utils”,“案例id”:120,“订单”:1},{“id”:17,“名称”:“app3”,“家族”:“utils”,“案例id”:120,“订单”:2},{“id”:18,“名称”:“app3”,“家族”:“utils”,“案例id”:150,“订单”:null},]
//仅获取基于caseID的筛选项
//只挑选最大的
让filtered=json.reduce((a,c)=>{
如果(!a[c.caseID]| a[c.caseID][order']b.order-a.order)
console.log(结果)
在ES6中:
filtered =
[
{
id: 13,
name:"app1",
family:"apps",
caseID: 123,
order:3
},
{
id: 15,
name:"app2",
family:"tools",
caseID: 129,
order:2
},
{
id: 17,
name:"app3",
family:"utils",
caseID: 120,
order:2
},
{
id: 18,
name:"app3",
family:"utils",
caseID: 150,
order:null
}
]
在ES5中:
json.sort((a, b) => a.caseID > b.caseID);
let bad_order = json.filter(v => v.order === null);
let good_order = json.filter(v => v.order !== null);
json.sort(函数(a,b){返回a.caseID>b.caseID;});
var坏_顺序=[];
var良好_顺序=[];
for(var i=0;i
在ES6中:
filtered =
[
{
id: 13,
name:"app1",
family:"apps",
caseID: 123,
order:3
},
{
id: 15,
name:"app2",
family:"tools",
caseID: 129,
order:2
},
{
id: 17,
name:"app3",
family:"utils",
caseID: 120,
order:2
},
{
id: 18,
name:"app3",
family:"utils",
caseID: 150,
order:null
}
]
在ES5中:
json.sort((a, b) => a.caseID > b.caseID);
let bad_order = json.filter(v => v.order === null);
let good_order = json.filter(v => v.order !== null);
json.sort(函数(a,b){返回a.caseID>b.caseID;});
var坏_顺序=[];
var良好_顺序=[];
for(var i=0;i var filteredMap = {};
json.forEach(function (item) {
filteredMap[item.caseID] = item;
});
var filteredArray = [];
for (var key in filteredMap) {
filteredArray.push(filteredMap[key]);
}
console.log(JSON.stringify(filteredArray));
var json =
[
{
id: 11,
name:"app1",
family:"apps",
caseID: 123,
order:1
},
{
id: 12,
name:"app1",
family:"apps",
caseID: 123,
order:2
},
{
id: 13,
name:"app1",
family:"apps",
caseID: 123,
order:3
},
{
id: 14,
name:"app2",
family:"tools",
caseID: 129,
order:1
},
{
id: 15,
name:"app2",
family:"tools",
caseID: 129,
order:2
},
{
id: 16,
name:"app3",
family:"utils",
caseID: 120,
order:1
},
{
id: 17,
name:"app3",
family:"utils",
caseID: 120,
order:2
}, {
id: 18,
name:"app3",
family:"utils",
caseID: 150,
order:null
}
]
var obj = {}
var arr = json.sort(function(a, b) {
return b.order - a.order
}).sort(function(a, b) {
return a.caseId - b.caseId
}).filter(function(item, index, array){
return obj.hasOwnProperty(item.caseID) ? false : (obj[item.caseID] = true)
})
console.log(arr)