【问题标题】:using lodash unique on an array of arrays在数组数组上使用 lodash unique
【发布时间】:2015-11-03 19:43:54
【问题描述】:

我不确定如何使用它从主数组中删除重复数组。所以考虑以下几点:

var arr = [
    [0, 1],
    [0, 1],
    [2, 1],
];

生成的数组应如下所示:

var arr = [
    [0, 1],
    [2, 1],
];

该文档适用于单个元素数组,但不适用于二维数组。

想法?

更新,一些解决方案的一个小问题:

要变为唯一的数组可能有:

var arr = [
  [0, 1]
  [0, 2]
  [0, 3]
  [0, 1]
  [2, 1]
]

数组里面的数组应该比较所有的值,所以在上面的例子中,它应该吐出:

var arr = [
  [0, 1]
  [0, 2]
  [0, 3]
  [2, 1]
]

副本是[0, 1]

【问题讨论】:

标签: javascript lodash


【解决方案1】:

最简单的方法可能是使用uniq 方法,然后将内部数组转换为某种字符串表示,JSON.stringify 应该是足够好的解决方案。

var arr = [[0, 1], [0, 2], [0, 3], [0, 1], [2, 1]]
_.uniq(arr, function(item) { 
    return JSON.stringify(item); 
});
// [[0,1], [0,2], [0,3], [2,1]]

【讨论】:

  • 你有例子说明这会吐出什么吗?
  • 从 Lodash v4.0.0 开始,您必须改用 _.uniqBy
【解决方案2】:

您将在lodash 中使用.uniq 函数:

var arr = [
    [0, 1],
    [0, 1],
    [2, 1],
]

var uniqueList = _.uniq(arr, function(item, key, a) { 
    return item.a;
});

生成的数组将如下所示:

//var arr = [Object: [0, 1], Object: [2, 1]];

【讨论】:

  • 我在测试您的概念时遇到的一个小问题更新了我的问题。您能否看一下是否可以调整您的解决方案以使其正常工作?
【解决方案3】:

它不使用 lodash,没有优化我同意:

//remove duplicate array of array of arrays
Array.prototype.uniqueArray = function() {
    var uniqObj = {};
    this.forEach(function (item) {
        uniqObj[JSON.stringify(item)] = 1;
    });

    var uniqArray = [];
    for(var key in uniqObj) {
        if (uniqObj.hasOwnProperty(key)) {
            uniqArray.push(JSON.parse(key))
        }
    }
    return uniqArray;
};

【讨论】:

    【解决方案4】:

    当然,转换为 JSON 是可行的,但感觉我们可能在浪费资源。我在 Node.js 中使用以下 Lodash 代码:

    const _ = require("lodash");
    
    var arr = [
        [0, 1],
        [0, 1],
        [2, 1],
    ];
    
    var uni = _.uniqWith(arr, _.isEqual);
    console.log(uni);
    

    像魅力一样工作,check the Repl here。更多关于uniqWith at the Lodash docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 2019-10-02
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      相关资源
      最近更新 更多