using lodash unique on an array of arrays

百般思念 提交于 2020-01-03 04:00:26

问题


I am not sure how to use this to remove duplicate arrays from the main array. so consider the following:

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

The resulting array should look like:

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

The documentation makes sense for a single array of elements but not a 2d array.

Ideas?

Update, One small issue with some solutions:

The array to be turned unique might have:

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

the array in side the array should have all value compared, so in the above example, it should spit out:

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

The duplicate being [0, 1]


回答1:


The easiest way would probably be to use uniq method and then convert the inner arrays to some string representation, JSON.stringify should be good enough solution.

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



回答2:


You would use the .uniq function in lodash:

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

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

The resulting array will look like:

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



回答3:


It doesn't use lodash, not optimized I agree :

//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;
};


来源:https://stackoverflow.com/questions/33507701/using-lodash-unique-on-an-array-of-arrays

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!