简体   繁体   English

如何使用javascript订购嵌套数组对象

[英]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 . 它与您的相似,但包括对minsvalids的额外检查。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM