1

我正在尝试使用 underscore.js 库中的 _.without 和 _.difference 方法,但没有成功。

这是一些代码。

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

这是麻烦开始的地方,我想从 someId 的列表中删除所有 otherIds。所以根据网站我有两个选择,要么我可以使用_.difference || _。没有。我像这样使用它们...

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

我也尝试使用 _.difference 来做到这一点,但除了将第一个参数的副本返回到函数中之外,我似乎无法让这些方法做任何事情。我也尝试在不使用 _.toArray() 的情况下将参数传递给函数,但同样的事情发生了。以前有没有人遇到过这个错误?

编辑:

我已经尝试了下面建议的方式。我将提供更多代码以希望解决此问题。

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

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

当我进入 _.difference 时,我执行以下操作:

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

如果 someIds 长度是 657 而 otherIds 是 57 我应该得到 600 Id 的结果。相反,无论第一个参数的长度是多少,我都会得到一个结果,即 657。

编辑2:解决

我弄清楚了问题所在,毕竟问题出在我传递的差异的第二个论点上。

我正在执行数据库查询并返回一个如下所示的列表。

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

收到这些结果后,我想获得 facebook id,所以我做了以下操作,

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

这就是问题所在,那个 pluck 给我发回了一个未定义的列表。相反,我必须先进行 2 次弹拨,而不是 1 次,如下所示。

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

感谢@ZenMaster 放弃了关于 _.without && _.difference 之间差异的知识。你的答案是正确的,在一个活页夹后相当脑死,没有看到明显的东西。

4

1 回答 1

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

正确的调用是:

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

这将导致:

['2']

在您的情况下,您必须使用此处的JSFiddle_.difference中所见。

这是代码:

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);
于 2013-03-18T04:20:05.687 回答