[英]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.