我有一个像这样的对象数组:
[{"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} ]
最终数组不必按任何特定顺序排序。
答案 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/