简体   繁体   中英

using lodash unique on an array of arrays

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]

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

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

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

Sure, casting to JSON works, but it feels like we might be wasting resources. I'm using the following Lodash-code in Node.js:

const _ = require("lodash");

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

var uni = _.uniqWith(arr, _.isEqual);
console.log(uni);

Works like a charm, check the Repl here . More on uniqWith at the Lodash docs .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM