arrays - 使用Lodash从对象/值中删除键

标签 arrays lodash

我试图以2个对象数组a和b结尾。
如果键“名称”出现在数组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' });


尽管代码会执行,但卵石不会消失。

最佳答案

您可以在remove()中使用forEach()以获得所需的结果...

_(z).forEach(function (n) {
    _.remove(b, { 'name': n });
});


可以通过删除zforEach()进一步简化代码。

var a = _.filter(characters, { 'blocked': 'a' });
var b = _(characters)
            .difference(a)
            .reject(function (x) { 
                return _.where(a, { 'name': x.name }).length; 
            })
            .value();


JSFiddle

关于arrays - 使用Lodash从对象/值中删除键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23919471/

相关文章:

Javascript:按每个内部数组中的第二个元素对数组数组进行排序

JavaScript 不区分大小写的数组通用排序

java - Vector<> 类的 toArray() 方法

arrays - 在将动态数组作为变量参数传递之前是否可以强制转换?

javascript - 如果路径有效,Lodash 返回值数组

javascript - 在 typescript 中将对象传递给 ._map

javascript - 使用 Lodash 比较对象数组和整数数组

java - 如何将元素集合添加到我的数组?

java - 返回 int[][] 数组

java - Java 中高效的数组元素取消排序