筛选和排序JavaScript数组 [英] Filter and sort a JavaScript array

查看:57
本文介绍了筛选和排序JavaScript数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样一个数组:

  [{
number:4,
fileName:fileXX,
评级:{
平均:6.4
}
},{
数字:3 ,
fileName:fileXX,
评级:{
平均:5.4
}
},{
数字:4,
fileName:fileXX,
评级:{
平均:5.4
}
}]

我正在尝试使用以下标准创建一个新数组:


  1. 获得每个号码的最高评级( 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;
});

对于您的测试用例,

  [{
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:

  1. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆