【问题标题】:How to join arrays using Lo-Dash如何使用 Lo-Dash 加入数组
【发布时间】:2014-03-08 00:30:42
【问题描述】:

由于我正在尝试 Lo-Dash,我想知道如何连接和排序两个数组?

A1: [ 3, 1 ]

A2: [ { 1: ‘val 1’ }, { 2: ‘val 2’ }, { 3: ‘val 3’ }, { 4: ‘val 4’ }, … ]

A1 join A2 orderBy Vals: [ { 1: ‘val 1’ }, { 3: ‘val 3’ }]

使用_.sortBy 进行排序似乎很简单。但是如何执行连接呢?

【问题讨论】:

  • 那不是你得到的有效 JavaScript。你的意思是[ { 1: 'val 1' }, { 2: 'val 2' },...] 它仍然是一个奇怪的结构,但至少它是有效的。
  • 从 lodash 4.x 开始,_join 是支持数组的方法,参考:lodash.com/docs#join

标签: javascript functional-programming lodash


【解决方案1】:

我将不得不做出一些假设来回答您的问题。首先,就像 cmets 中的 Louis mentionedA2 不是有效的 Javascript。因此,让我们按照 Louis 的建议使用 [{ 1: 'val 1' }, ...] 格式。其次,A2 中的对象是否保证只有一个键,或者我们需要搜索那些?为简单起见,我假设前者。

鉴于这些假设,以下将起作用:

_.filter(A2, function(d) {
  return _.contains(A1, _.parseInt(_.keys(d)[0]));
});

与 Lo-dash 的大多数函数不同,这里使用的函数不会对普通的 Javascript 执行太多抽象。给定一个支持 ECMAScript 5 的浏览器,您可以将 Lodash 包装器替换为以下内容以获得相同的功能:

A2.filter(function(d) {
  return A1.indexOf(parseInt(Object.keys(d)[0])) !== -1;
});

【讨论】:

  • 是的,A2 的密钥确实是独一无二的。感谢您的解决方案。我不保证会使用支持 ECMA5 的浏览器。 Lo-dash 解决方案是否也适用于非 ECMA5 浏览器?
  • 是的。如果 Object.keys 不可用,Lo-dash 有一个备用实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多