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

时间:2016-05-21 15:05:42

标签: javascript arrays duplicates lodash

我正在尝试使用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文档,但我在这方面缺乏知识,所以任何帮助都会超级欣赏它。

感谢。

3 个答案:

答案 0 :(得分:5)

确保使用正确的命名,该代码适用于我:

    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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果您想确保可以使用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
});