【问题标题】:Get items from collection by array values通过数组值从集合中获取项目
【发布时间】:2018-09-11 11:05:18
【问题描述】:

我想知道从集合中通过数组元素获取元素的最佳和最简单的方法是什么 - 是否可以使用本机 js?

这是怎么回事:

const ids = [1, 2, 3, 4]
const collection = [{id: 2}, {id: 234}, {id:1}, {id: 345}, {id: 3}, {id:4}, {id:323}];

预期的输出应该是这样的:

[{id: 1}, {id: 2}, {id: 3}, {id: 4}]

lodash 是否已经内置了一些东西?我知道我们可以使用 filter 和 indexOf 但我想知道最短和最简单的方法是什么。

【问题讨论】:

标签: javascript arrays collections filter lodash


【解决方案1】:

由于输出顺序必须与ids 同步,请使用mapfind

var output = ids.map( s => collection.find( t => t.id == s ) )

演示

var ids = [1, 2, 3, 4];
var collection = [{
  id: 2
}, {
  id: 234
}, {
  id: 1
}, {
  id: 345
}, {
  id: 3
}, {
  id: 4
}, {
  id: 323
}];
var output = ids.map(s => collection.find(t => t.id == s));
console.log(output);

如果ids中的某些值collection中没有等效值,则在map之后使用filter

var output = ids.map(s => collection.find(t => t.id == s)).filter( s => !!s );

演示

var ids = [1, 2, 3, 4, 5];
var collection = [{
  id: 2
}, {
  id: 234
}, {
  id: 1
}, {
  id: 345
}, {
  id: 3
}, {
  id: 4
}, {
  id: 323
}];
var output = ids.map(s => collection.find(t => t.id == s)).filter( s => s );
console.log(output);

【讨论】:

    【解决方案2】:

    使用 lodash,您可以使用 _.keyBy() 通过 id 索引 collection,然后使用 _.at() 通过 ids 获取项目:

    const ids = [1, 2, 3, 4]
    const collection = [{id: 2}, {id: 234}, {id:1}, {id: 345}, {id: 3}, {id:4}, {id:323}];
    
    const result = _.at(_.keyBy(collection, 'id'), ids);
      
    console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>

    【讨论】:

      【解决方案3】:

      简单的 JS

      使用filterincludes的组合

      const ids = [1, 2, 3, 4]
      const collection = [{id: 2}, {id: 234}, {id:1}, {id: 345}, {id: 3}, {id:4}, {id:323}];
      
      const found = collection.filter(item => ids.includes(item.id));
      
      console.log(found);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-28
        • 2018-07-05
        • 2019-01-12
        • 1970-01-01
        • 2020-02-05
        • 1970-01-01
        • 2017-02-15
        • 2018-07-01
        相关资源
        最近更新 更多