【问题标题】:underscore.js - Is there a function that produces an array thats the difference of two arrays?underscore.js - 是否有一个函数可以生成一个数组,这就是两个数组的区别?
【发布时间】:2011-08-08 23:58:23
【问题描述】:

在 underscore.js 中寻找一个函数,该函数将采用 2 个数组并返回一个新的唯一值数组? _without 之类的东西

_.without([0, 1, 3, 9], [1, 3]);

我希望=> [0,9]返回

似乎 _without 的第二个参数是一个值列表,而不是一个数组。外面的人都知道 如果下划线具有我正在寻找的特定功能?或者我可以采用现有数组并将其转换为函数期望的值。

谢谢,
~ck 在圣地亚哥

【问题讨论】:

  • 感谢杰夫的编辑。错字。

标签: javascript underscore.js


【解决方案1】:
var result = _.reject([0, 1, 3, 9], function(num) {
                return _.include([1, 3], num);
            });

【讨论】:

  • 任何描述你的sn-p在做什么?
  • @kaiser:reject 采用一个列表和一个函数作为“真值测试”来询问是否应该拒绝每个项目。在这种情况下,指定该函数来检查给定项目是否包含在列表[1, 3] 中。如果是,它将返回true,而reject 将拒绝该值。回到顶层,reject 被赋予原始列表,并将返回一个没有任何拒绝值的新列表。
【解决方案2】:

_.without.apply(_, [arr1].concat(arr2))

[[0, 1, 3, 9]].concat([1, 3])[[0, 1, 3, 9], 1, 3]

_.without.apply(_, [[0, 1, 3, 9], 1, 3])_.without([0, 1, 3, 9], 1, 3)

你有一个非常好的_.without 方法。因此,只需将数组转换为可以传递给函数的值列表。这就是Function.prototype.apply的目的

【讨论】:

  • 两种解决方案都是正确的,但是我喜欢您将其转换为函数所需的参数样式。干得好!!!
  • 已弃用,应使用 _.difference
【解决方案3】:

_.difference 函数应该为您提供所需的内容:

_.difference([0, 1, 3, 9], [1, 3]); // => [0, 9]

【讨论】:

  • 我看不到的一个函数是在 ([0,1,3,9], [1,3,12]) 的情况下给出 [0,9,12] 的函数。我认为这是“分离”
【解决方案4】:

Lo-Dash 是下划线的扩展,这是您需要的:http://lodash.com/docs#xor

_.xor

创建一个数组,它是所提供数组的对称差。见http://en.wikipedia.org/wiki/Symmetric_difference

_.xor([1, 2, 3], [5, 2, 1, 4]);
// → [3, 5, 4]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 2014-11-16
    相关资源
    最近更新 更多