使用lodash.js从对象数组中删除重复项

6
我正在尝试使用lodash.js移除重复项,但我无法使其正常工作。
这是数组中对象的结构:
{
   label: 'tagA',
   value: 1
}

假设我有这个数组:

var objectsArray = [
  {
    label: 'tagA',
    value: 1
  },
  {
    label: 'tagB',
    value: 2
  },
  {
    label: 'tagC',
    value: 3
  },
  {
    label: 'tagB',
    value: 4
  },
  {
    label: 'tagB',
    value: 5
  },
];

我使用 lodash.js 中的 _.uniqBy() 函数编写了这段代码,试图删除具有相同标签的数组元素,但它并没有按照我的预期工作:
    var uniq = _.uniqBy(objectsArray, function(o){
        return o.label;
    });

我参考了一些样例和lodash文档,但在这方面缺乏知识,因此非常感谢任何帮助。

谢谢。


它没有按预期工作。你希望它如何工作,它又是如何工作的? - user663031
3个回答

11

请确保使用正确的命名方式,这段代码对我而言可以正常运行:

    var arr = [
                {
                  label: 'tagA',
                  value: 1
                },
                {
                  label: 'tagB',
                  value: 2
                },
                {
                  label: 'tagC',
                  value: 3
                },
                {
                  label: 'tagB',
                  value: 4
                },
                {
                  label: 'tagB',
                  value: 5
                },
              ];

    var uniq = _.uniqBy(arr, function(o){
        return o.label;
    });

    console.log(uniq); // >> Returned an array with first 3 objects from array arr

我认为他在第一个.uniqBy()参数中错过了数组名称。 - flppv
不,他传递了 objectsArray - user663031
我明白了。但是我没有看到他是否声明了它,我只看到上面的未命名数组。 - flppv
可以安全地假设他已经这样做了。如果您认为他可能没有这样做,您应该留下评论以确认。 - user663031
@torazaburo 这只是失败的唯一方式,或者他可能忘记导入库了。 - flppv
是的,我已经声明了,很抱歉假设你会知道我会编辑它。除此之外,最终它也按照我在问题中提到的方式工作了,但是数组的初始化有问题。希望其他人能帮助解决这个问题。非常感谢你的帮助,我真的很感激! - Yonirt

2
如果您想确保可以使用uniqWith();,这对我很有效。
var data = [
  {
    label: 'tagA',
    value: 1
  },
  {
    label: 'tagB',
    value: 2
  },
  {
    label: 'tagC',
    value: 3
  },
  {
    label: 'tagB',
    value: 4
  },
  {
    label: 'tagB',
    value: 5
  },
];

var filtered = _.uniqWith(data, function(first, second){

    return first.label === second.label
});

0

我认为第二个例子就是你需要的uniqBy

// The `_.property` iteratee shorthand.
_.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
// → [{ 'x': 1 }, { 'x': 2 }]

感谢您的努力,我非常感激。 - Yonirt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接