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

Javascript 从另一个具有多个约束的对象数组返回唯一对象数组,javascript,arrays,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} ] 我希望对其进行筛选,以便每个唯一名称都有一个实例,并且该实例

我有这样一个对象数组:

[{"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} ]

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

使用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;
}
函数解决方案(A)
{
var endObj={};
对于(变量i=0,ii=A.length;i 40)
继续;
如果(!endObj[val.name]){
endObj[val.name]=val;
继续;
}
if(endObj[val.name].number
我只是通过使用名称作为新对象的键来跟踪名称,然后在完成后将该对象转换为无键数组


jsFIDLE示例:

您应该添加您尝试过的代码。寻求调试帮助的问题(“为什么此代码不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小的、完整的和可验证的示例。您可能应该使用筛选器在数组上循环,并为遇到的名称创建一个索引对象。每一个都有一个价值,谢谢,这真的很有帮助,对我的情况非常有效。