Node.js过滤对象数组,其中值重复但另一个不重复

时间:2017-11-10 10:12:40

标签: node.js ecmascript-6 filtering

我有一组具有以下结构的对象:

  

[{type:' A',rank:10},   {type:' B',排名:10},   {type:' A',排名:16},   {type:' B',rank:16}]

我希望每个object.type保留一个对象,即object.rank最大的那个对象,所以我在这种情况下的预期输出是:

  

[{type:' A',rank:16},   {type:' B',rank:16}]

我的代码是:

  

conditions = conditions.filter((cond,index,self)=> self.findIndex((t)=> {return t.type === cond.type&& t.rank< cond .rank;})=== index);

此代码删除所有对象。当我不使用

  

t.rank< cond.rank

然后它起作用,但不能保证它会给予最大的排名。

提前感谢您,我当然不会坚持使用ES6解决方案。

2 个答案:

答案 0 :(得分:2)

您可以结合使用Array.reduceArray.findIndex来获得所需的结果。

base 8  Decimal 
0        0
1        1
2        2
3        3
4        4
5        5
6        6
7        7
10       8
11       9            -> Here
12       10
13       11

答案 1 :(得分:1)

我使用简单的javascript函数编写了自己的解决方案。

  var conditions = [{ type: 'A', rank: 10 }, { type: 'B', rank: 10 }, { type: 'A', rank: 16 }, { type: 'B', rank: 16 }];

    function check(type, rank) {    
           for (var j = 0; j < conditions.length; j++) {   
            if (conditions[j].type == type) {   
                if (conditions[j].rank > rank) {  
                    return 1;  
                }  
            }  
        }  
        return 0;  
    } 

    for (var i = 0; i < conditions.length; i++) {
        if (check(conditions[i].type, conditions[i].rank)) {
            conditions.splice(i, 1);
            i = i - 1;
        }
    }
    console.log(conditions);