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

Remove duplicate items in objects array with lodash.js

我正在尝试使用 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 文档,但我在这方面缺乏知识,所以任何帮助都会非常感激。

谢谢。

确保您使用的是专有名称,该代码适合我:

    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:

// The `_.property` iteratee shorthand.
_.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
// → [{ 'x': 1 }, { 'x': 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
});