Underscore: _.without 接受数组作为第二个参数

创建于 2011-01-21  ·  10评论  ·  资料来源: jashkenas/underscore

_.without 的当前定义接受数组作为第一个参数,然后是任意数量的后续参数。 我知道这可能会很棘手,但如果我可以将另一个数组作为参数传递,它会很有帮助。

新功能将作为
_.without([1,2,3], [1, 2])
回报
[3]

据我所知 _.without 不能深入工作,所以它可能不会过于复杂 -
_.without([1,2,3,[1]], [1], 1)
回报
[2, 3, [1]]

enhancement wontfix

最有用的评论

对于那些在这里找到路的人...... _.difference([0, 1, 3, 9], [1, 3]); // => [0, 9]

来自: http :

所有10条评论

幸运的是,JavaScript 有一种内置方法可以将任意数量的参数传递给函数。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply

_.without.apply(_, [1, 2, 3], [1, 2])

肯定的! 笨蛋,我怎么会忘记……

好像需要这样调用

_.without.apply(_, [[1,2,3], 1, 2])

这使得它有点复杂(用原始阵列取消排除阵列)。

更新:我为此问题创建了一张新票: https :

我必须同意你们两个:Jeremy 保持 _.without 签名一致,Ondrey 发现 Jeremys 提出的解决方法有点黑客(它似乎对我也不起作用)。

因此,我想提议引入两个新的下划线函数: _.difference(*arrays)_.symdifference(a,b) :差异会从第一个数组中找出没有出现在其他提供的数组中的所有元素,其中 _.symdifference() 将返回那些在 a 或 b 但不在两者中的元素。

这些函数的“灵感”来自python set 数据类型,恕我直言,它们不应该仅限于数组,因为它们也适用于对象。

只是一种用下划线编写它的快速方法:_.without.apply(_, [x].concat(y)), 将返回 x 中的值数组,而没有 y 中的值。

@rubenstolk的回答有效,只是他没有注释掉他的代码,因此下划线解释为斜体。 为了后代! :railway_car: :rocket: :rainbow: :raised_hands:

_.without.apply(_, [originalArray].concat(removeArray));

我认为 Github 两年前没有这样做@reggi!

对于那些在这里找到路的人...... _.difference([0, 1, 3, 9], [1, 3]); // => [0, 9]

来自: http :

我知道这是关闭的,但是 ES6 的扩展运算符会对此有所帮助;)

对于不想搜索@agwidarsito提到的 ES6 扩展运算符的任何人,他的意思是您可以在 ES6 中执行此操作:

const items = [1,2,3,4];
const itemsToRemove = [3,4,5];
const result = _.without(items, ...itemsToRemove);
// result is [1,2]

谢谢@addisonbgross!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

jdalton picture jdalton  ·  4评论

arieljake picture arieljake  ·  4评论

zackschuster picture zackschuster  ·  5评论

haggholm picture haggholm  ·  8评论

afranioce picture afranioce  ·  8评论