最优雅的方式来过滤其他数组的数组

时间:2016-07-13 13:37:35

标签: javascript arrays ecmascript-6

我基本上创建了一个getItemsByIds(ids)函数,其中items是一个对象数组,每个对象都有一个id键,ids是一个id数组。

我对ES6很新,所以我确信有一个更优雅的方法可以解决这个问题,而且由于我所有的服务都有这种功能我喜欢它尽可能优化。这就是我现在所拥有的:

getItemsByIds (ids) {
    return this.getAllItems().then(items => items.filter(item => {
        for (var i = 0; i < ids.length; i++) {
            if (item.id == ids[i]) {
                return true;
            }
        }

        return false;
    }));
}

就像我说的那样,items数组基本上是这样的:

[{id: 0, name: 'Foo'}, {id: 1, name: 'Bar'}, {id: 2, name: 'Baz'}]

2 个答案:

答案 0 :(得分:2)

您可以将其转换为ids.indexOf(item.id) > -1

getItemsByIds (ids) {
    return this.getAllItems()
    .then(items => items.filter(item => ids.indexOf(item.id) > -1));
}

答案 1 :(得分:2)

Array#indexOf的替代方案,如果您可以使用(例如polyfilled),则是ES2016方法Array#includes

getItemsByIds (ids) {
    return this.getAllItems()
        .then(items => items.filter(item => ids.includes(item.id));
}