Underscore.js – 没有和差异的方法麻烦

我试图在underscore.js库中使用_.without和_.difference方法,但没有运气。

这是一些代码。

var someIds = _.pluck(parsedID1, 'id'); var otherIds = _.pluck(parsedID2, 'id); 

这是麻烦开始的地方,我想从someId的列表中删除所有otherIds。 所以我有两个select根据网站,或者我可以使用_.difference || _.without。 我用它们就像这样…

 var newArray = _.without(_.toArray(someIds), _.toArray(otherIds)); 

我也试图用_.difference来做到这一点,但我似乎无法做任何事情,除了第一个参数的副本返回到函数。 我也尝试将parameter passing给函数而不使用_.toArray(),但同样的事情发生。有没有人曾经遇到过这个错误?

编辑:

我已经尝试了下面提出的方式。 我会再提供一些代码,希望能够解决这个问题。

我作为参数传入的数组采用以下格式。

 var array = ['100004191488120', '100004191488321']; 

当我进入_.difference时,我的操作如下:

 var newArray = _.difference(someIds, otherIds); 

如果someIds长度是657和其他的ID是57我应该得到600 Id的结果。 相反,我得到了第一个参数的长度是657的结果。

编辑2:解决

我想清楚问题是什么,毕竟这个问题和第二个争议的问题混淆在一起。

我正在做一个数据库查询,并得到一个如下所示的列表。

 [{ _id: 514721152222111116666777, facebook: { id: '123456789' } }, { _id: 514721152222111116666778, facebook: { id: '12345678' } },] 

我收到这些结果后,我想获得Facebook的身份证,所以我做了以下,

 var array = _.pluck(users, 'facebook.id'); 

那就是问题所在,那个采摘会把我送回一个未定义的列表。 相反,我必须先做2次而不是1次,如下所示。

 var temp = _.pluck(users, 'facebook'); var arrayId = _.pluck(temp, 'id'); 

感谢@ ZenMaster放弃了关于_.without && _.difference之间区别的知识。 你的回答是正确的,在一个活页夹之后,脑子已经死了,没有看到明显的东西。

  1. without函数的第一个参数不需要_.toArray
  2. without的第二个(也是更多)参数不是数组 – 它是值的“列表”。

正确的电话会是:

var newArray = _.without(['1', '2', '3'], '1', '3');

这将导致:

['2']

在你的情况下,你将不得不使用_.difference在JSFiddle这里可以看到。

这里是代码:

 var parsedID1 = [{id: '1', name: 'name1'}, {id: '2', name: 'name2'}]; var parsedID2 = [{id: '1', name: 'name1'}, {id: '3', name: 'name3'}]; var someIds = _.pluck(parsedID1, 'id'); var otherIds = _.pluck(parsedID2, 'id'); console.log(someIds, otherIds); var newArray = _.difference(someIds, otherIds); console.log(newArray);