我正在寻找一种简单的方法,不仅可以过滤,还可以重新排序对象数组,以便过滤格式并按正确的顺序排序。这是一个示例数组
[{
"id": "4",
"fileName": "fileXX",
"format": "mp3"
}, {
"id": "5",
"fileName": "fileXY",
"format": "aac"
}
}, {
"id": "6",
"fileName": "fileXZ",
"format": "opus"
}
}]
数组可能更长并且包含不同的格式,但目标是始终只允许mp3和aac并且aac在数组中排在第一位。此示例的结果将是
[{
"id": "5",
"fileName": "fileXY",
"format": "aac"
}
},{
"id": "4",
"fileName": "fileXX",
"format": "mp3"
}]
应避免按字母顺序排序,因为所需的顺序可能会在以后更改。
答案 0 :(得分:2)
您可以使用所需格式的对象进行过滤,并按所需顺序对其进行排序。
var data = [{ id: "4", fileName: "fileXX", format: "mp3" }, { id: "5", fileName: "fileXY", format: "aac" }, { id: "6", fileName: "fileXZ", format: "opus" }],
order = { aac: 1, mp3: 2 },
result = data
.filter(({ format }) => format in order)
.sort((a, b) => order[a.format] - order[b.format]);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:1)
您可以尝试这样的事情:
let myResult = array.filter(function(file) {
return file.format === 'mp3' || file.format === 'aac'
}).sort(function(a, b){
if (a.format === b.format) return 0 // same order
else if (a.format === 'aac') return -1 // a before b
else return 1 // b before a
})
答案 2 :(得分:0)
您只需过滤相关格式,然后对结果集进行排序
var arr = [
{
"id": "4",
"fileName": "fileXX",
"format": "mp3"
}, {
"id": "5",
"fileName": "fileXY",
"format": "aac"
}, {
"id": "6",
"fileName": "fileXZ",
"format": "opus"
}
]
var filteredArr= arr.filter(item=>item.format === 'mp3' || item.format ==='aac')
filteredArr.sort(function(a,b){
return a.format > b.format
})
console.log(filteredArr)