在数组数组上使用lodash unique

时间:2015-11-03 19:43:54

标签: javascript lodash

我不知道如何使用它从主数组中删除重复的数组。请考虑以下事项:

UPDATE table_name SET field = REPLACE(field, ' ', 'My text')

结果数组应如下所示:

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

文档对单个元素数组有意义,但不适用于2d数组。

思想吗

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

要转换为唯一的数组可能包含:

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] ]

4 个答案:

答案 0 :(得分:3)

最简单的方法可能是使用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]]

答案 1 :(得分:2)

您可以使用.uniq中的lodash功能:

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]];

答案 2 :(得分:0)

它没有使用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;
};

答案 3 :(得分:-1)

当然,强制转换为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的更多信息。