筛选和排序JavaScript数组 [英] Filter and sort a JavaScript array
本文介绍了筛选和排序JavaScript数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有这样一个数组:
[{
number:4,
fileName:fileXX,
评级:{
平均:6.4
}
},{
数字:3 ,
fileName:fileXX,
评级:{
平均:5.4
}
},{
数字:4,
fileName:fileXX,
评级:{
平均:5.4
}
}]
我正在尝试使用以下标准创建一个新数组:
- 获得每个号码的最高评级(
array.rating.average
)(array.number
)
输出应为:
[{
number:4,
fileName:fileXX,
rating:{
average:6.4
}
},{
数字:3,
fileName:fileXX,
评级:{
平均:5.4
}
}
}]
我刚设法按最高评分排序:
array.sort(function(a,b){
return a.rating.average - b.rating.average;
});
array.reverse();
但是,现在,我只需要每个重复一个对象 array.number
,保持最高 array.rating.average
。
如果(a.number === b.number){$ b} $ b //如果两个元素具有相同的数字,则具有较大rating.average的那个赢得
返回b.rating.average - a.rating.average;
} else {
/ /如果两个元素具有不同的数字,那么具有较大数字的那个赢得
返回b.number - a.number;
}
});
array = array.filter((element,index)=> {
return index === 0 || element.number!== array [index-1 ] .number;
});
返回b.rating.average - a.rating.average;
} else {
/ /如果两个元素具有不同的数字,那么具有较大数字的那个赢得
返回b.number - a.number;
}
});
array = array.filter((element,index)=> {
return index === 0 || element.number!== array [index-1 ] .number;
});
对于您的测试用例,
[{
number:4,
fileName:fileXX,
rating:{
average :6.4
}
},{
数字:3,
fileName:fileXX,
评级:{
平均:5.4
}
},{
数字:4,
fileName:fileXX,
评级: {
平均:5.4
}
}]
排序后,输出将是
[{
number:4,
fileName:fileXX,
rating:{
average:6.4
}
},{
number:4,
fileName:fileXX,
评级:{
平均:5.4
}
},{
数字: 3,
fileName:fileXX,
评级:{
平均:5.4
}
}]
过滤后,最终结果为:
[{
number:4,
fileName: fileXX,
评级:{
平均:6.4
}
},{
数字:3,
fileName:fileXX,
rating:{
average:5.4
}
}]
I have an array like this:
[{
"number": "4",
"fileName": "fileXX",
"rating": {
"average": 6.4
}
}, {
"number": "3",
"fileName": "fileXX",
"rating": {
"average": 5.4
}
}, {
"number": "4",
"fileName": "fileXX",
"rating": {
"average": 5.4
}
}]
I am trying to create a new array with the following criteria:
- Get highest rating (
array.rating.average
) of each number (array.number
)
Output should be:
[{
"number": "4",
"fileName": "fileXX",
"rating": {
"average": 6.4
}
}, {
"number": "3",
"fileName": "fileXX",
"rating": {
"average": 5.4
}
}
}]
I have just managed to sort by highest rating:
array.sort(function(a , b) {
return a.rating.average - b.rating.average;
});
array.reverse();
But, now, I just only want one object per duplicate array.number
, keeping the one that has the highest array.rating.average
.
解决方案
array.sort((a, b) => {
if(a.number === b.number) {
// If two elements have same number, then the one who has larger rating.average wins
return b.rating.average - a.rating.average;
} else {
// If two elements have different number, then the one who has larger number wins
return b.number - a.number;
}
});
array = array.filter((element, index) => {
return index === 0 || element.number !== array[index-1].number;
});
For your test case,
[{
"number": "4",
"fileName": "fileXX",
"rating": {
"average": 6.4
}
}, {
"number": "3",
"fileName": "fileXX",
"rating": {
"average": 5.4
}
}, {
"number": "4",
"fileName": "fileXX",
"rating": {
"average": 5.4
}
}]
After sorting, the output would be
[{
"number": "4",
"fileName": "fileXX",
"rating": {
"average": 6.4
}
}, {
"number": "4",
"fileName": "fileXX",
"rating": {
"average": 5.4
}
}, {
"number": "3",
"fileName": "fileXX",
"rating": {
"average": 5.4
}
}]
And after filter, the final result:
[{
"number": "4",
"fileName": "fileXX",
"rating": {
"average": 6.4
}
}, {
"number": "3",
"fileName": "fileXX",
"rating": {
"average": 5.4
}
}]
这篇关于筛选和排序JavaScript数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文