javascript - 如何使用 javascript 对嵌套数组对象进行排序
问题描述
我想知道如何使用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"
}]
解决方案
我认为这个功能会做你想要的。它与您的类似,但包括对mins
and的额外检查valids
。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));
推荐阅读
- mysql - 如何订购我的 mysql 查询以双重标准?
- kubernetes - 如何使用负载均衡器(或直接)从外部访问 pod?
- docusignapi - 有没有办法在 Admin Docusign Sandbox API 上包含禁用多个字段中的数据复制的选项
- python - 如何使用网络刮刀刮取 svg 图像?
- mongodb - Mongoose - 根据某些过滤条件修改 Schema 中的数组属性元素
- python - python api对json对象的响应
- c++ - 关于 g++ 链接器错误“未定义的引用”
- woocommerce - 在 woocommerce 中自定义 SKU
- javascript - 当画布上有 % 宽度时,如何找到鼠标在画布上的位置?
- perl - 如何使用for循环结果并在perl中使用mailx插入正文电子邮件