【问题标题】:how to order the nested array object using javascript如何使用 javascript 对嵌套数组对象进行排序
【发布时间】:2019-08-13 04:39:08
【问题描述】:

我想知道如何使用javascript根据顺序过滤和获取对象

我有一个obj,如下所示,应该根据 order 和 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"
}]

预期输出:

[{
 "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"
}]

【问题讨论】:

  • 按什么 id 或 amt 或错误排序?? @Senthil
  • @UdalPal 感谢您的回复,已经提到条件 ``` objno error key &amp;&amp; amt &gt; min 应按 amt 排序方式显示在顶部。 objamt&lt;min 应该显示下一个 objerror 应该显示最后一个```
  • 为什么 sf 排在第二位 no error key &amp;&amp; amt &gt; min should display at the top in sorted manner by amt?
  • @User863 是的...
  • amt == min 呢?

标签: javascript arrays sorting object


【解决方案1】:

我认为这个功能会做你想做的事。它与您的类似,但包括对minsvalids 的额外检查。然后它将每个数组按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));

【讨论】:

    最近更新 更多