从具有多个约束的另一个对象数组返回唯一对象的数组

时间:2016-05-09 01:22:14

标签: javascript arrays

我有一个像这样的对象数组:

[{"name" : "Annie", "number" : 25},
{"name" : "Zeus", "number" : 25},
{"name" : "John", "number" : 40},
{"name" : "John", "number" : 32},
{"name" : "Zeus", "number" : 75},
{"name" : "Zeus", "number" : 32} ]

我想过滤这个,以便我有一个每个唯一名称的实例,并且该实例必须给我一个小于或等于40的最大数字。上述情况,如果被过滤,将返回:

[{"name" : "Annie", "number" : 25},
{"name" : "John", "number" : 40},
{"name" : "Zeus", "number" : 32} ]

最终数组不必按任何特定顺序排序。

1 个答案:

答案 0 :(得分:0)

使用O(N)解决方案是一个非常简单的挑战。一个函数就这样做了:

function solution(A)
{
    var endObj = {};
    for (var i=0, ii=A.length; i<ii; i++)
    {
        var val = A[i];

        if (val.number > 40)
            continue;

        if (!endObj[val.name]) {
            endObj[val.name] = val;
            continue;
        }

        if (endObj[val.name].number < val.number)
            endObj[val.name] = val;
    }

    var endArr = [];
    for (var key in endObj)
        endArr.push(endObj[key]);

    return endArr;
}

我只是使用它们作为新对象的键来跟踪名称,然后在完成后将该对象转换为无键数组。

JSfiddle示例:https://jsfiddle.net/qa7vzvp5/