繁体   English   中英

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

[英]Return array of unique objects from another array of objects with multiple constraints

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

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

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

这里的 JSfiddle 示例: https ://jsfiddle.net/qa7vzvp5/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM