[英]how to order the nested array object using javascript
I would like to know how to filter and get the object based on order using javascript 我想知道如何使用javascript根据订单过滤和获取对象
I have a obj
as shown below and should filter based on order and concat. 我有一个
obj
,如下所示,应该根据顺序和concat进行过滤。
`obj` with `no error key && amt > min` should display at the top in sorted manner by amt.
`obj` with `amt<min` should display next
`obj` with `error` should display last
var output = orderData(obj);
function orderData(obj){
var minData = obj.filter(e=>e.amt<e.min);
var errData = obj.filter(e=>e.hasOwnProperty("error"));
var validData = obj.filter(e=>!e.hasOwnProperty("min") && !e.hasOwnProperty("error"));
var result = validData.concat(errData).concat(minData);
return result;
}
var obj =[{
"id": "trans",
"amt": 1000
},{
"id": "fund",
"amt": 500
},{
"id": "inst",
"amt": 2000,
"error": "invalid"
},{
"id": "wf",
"amt": 600,
"min": 2000
},{
"id": "sf",
"amt": 500,
"min": "250"
}]
Expected Output: 预期产量:
[{
"id": "fund",
"amt": 500
},{
"id": "sf",
"amt": 500,
"min": "250"
},{
"id": "trans",
"amt": 1000
},{
"id": "wf",
"amt": 600,
"min": 2000
},{
"id": "inst",
"amt": 2000,
"error": "invalid"
}]
I think this function will do what you want. 我认为此功能可以完成您想要的操作。 It is similar to yours but includes the extra checks on the
mins
and valids
. 它与您的相似,但包括对
mins
和valids
的额外检查。 It then sorts each array by amt
ascending before concatenating them together: 然后,在将它们连接在一起之前,它们通过
amt
升序对每个数组进行排序:
var obj =[{ "id": "trans", "amt": 1000 },{ "id": "fund", "amt": 500 },{ "id": "inst", "amt": 2000, "error": "invalid" },{ "id": "wf", "amt": 600, "min": 2000 },{ "id": "sf", "amt": 500, "min": "250" }]; function sortObj(a, b) { return a.amt - b.amt; } function orderData(obj) { errors = obj.filter(e => e.hasOwnProperty('error')); errors.sort(sortObj); mins = obj.filter(e => !e.hasOwnProperty('error') && e.hasOwnProperty('min') && e.amt < e.min); mins.sort(sortObj); valids = obj.filter(e => !e.hasOwnProperty('error') && (!e.hasOwnProperty('min') || e.amt > e.min)); valids.sort(sortObj); return valids.concat(mins).concat(errors); } console.log(orderData(obj));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.