哪个更好,用过滤器或循环来识别数组的一部分

时间:2017-10-02 21:41:15

标签: javascript arrays loops

我正在尝试编写一个泛型函数,它将从一个对象数组中检索一组匹配的记录。在此数组中,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列表。过滤器在这种情况下是否真的有效,或者考虑循环是否正确?请指教。

2 个答案:

答案 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)

第二种选择更有效,也是正确的方法。

在这种情况下,过滤器不合适,因为即使您知道没有更多匹配项,它也会继续运行。