我有一个这样的对象数组:
[{"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/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句