我正在尝试编写一个泛型函数,它将从一个对象数组中检索一组匹配的记录。在此数组中,userId按升序排序。
var myArray = [
{userId: 1001, name: 'User1'},
{userId: 1002, name: 'User2'},
...
]
//使用1st Type - _.filter - 我的首选方法。除了性能之外,我使用这种方法作为整个应用程序代码的一般做法,希望继续使用最新的方法。
function getRecords(n) {
return _.filter(myArray, function(userRecord) {
return userRecord.userId < n;
})
}
//使用第二种类型 - 评估此选项,这是否比前一种更有效
function getRecords(n) {
var filteredRecords = [];
for(i=0;i < myArray.length; i++) {
if (myArray[i].userId < n) {
filteredRecords.push(myArray[i]);
} else {
break;
}
}
return filteredRecords;
}
在第二种方法中,我知道for循环会立即中断而不是迭代直到数组结束,但另一方面过滤器将通过entier列表。过滤器在这种情况下是否真的有效,或者考虑循环是否正确?请指教。
答案 0 :(得分:1)
你可以拿Array#some
并推动物品,直到你达到退出状态。然后返回true
并退出。
function getRecords(userId) {
var temp = [];
myArray.some(function(userRecord) {
if (userRecord.userId >= userId) {
return true;
}
temp.push(userRecord);
});
return temp;
}
答案 1 :(得分:0)
第二种选择更有效,也是正确的方法。
在这种情况下,过滤器不合适,因为即使您知道没有更多匹配项,它也会继续运行。