我试图最终得到2个对象阵列,a&湾 如果键'name'出现在数组a中,我不希望它出现在b。
中var characters = [
{ 'name': 'barney', 'blocked': 'a', 'employer': 'slate' },
{ 'name': 'fred', 'blocked': 'a', 'employer': 'slate' },
{ 'name': 'pebbles', 'blocked': 'a', 'employer': 'na' },
{ 'name': 'pebbles', 'blocked': 'b', 'employer': 'hanna' },
{ 'name': 'wilma', 'blocked': 'c', 'employer': 'barbera' },
{ 'name': 'bam bam', 'blocked': 'c', 'employer': 'barbera' }
];
var a = _.filter(characters, { 'blocked': 'a' });
var z = _.pluck(a,'name');
var b = _.difference(characters, a);
_(z).forEach(function (n) {
//_.pull(b, _.filter(b, { 'name': n }));
//b = _.without(b, { 'name': n });
// b = _.without(b, _.filter(b, { 'name': n }));
_.without(b, _.filter(b, { 'name': n }));
});
代码运行,但数组“b”永远不会改变。我期望数组“b”有两个名为wilma和bam bam的对象。 我试着没有循环。
var c = _.without(b, _.filter(b, { 'name': 'pebbles' }));
var d = _.without(b, { 'name': 'pebbles' });
var f = _.pull(b, { 'name': 'pebbles' });
虽然代码执行,但鹅卵石不会去。
答案 0 :(得分:20)
您可以在remove()
中使用forEach()
来获得您想要的效果......
_(z).forEach(function (n) {
_.remove(b, { 'name': n });
});
删除z
和forEach()
...
var a = _.filter(characters, { 'blocked': 'a' });
var b = _(characters)
.difference(a)
.reject(function (x) {
return _.where(a, { 'name': x.name }).length;
})
.value();
<强> JSFiddle 强>