如何在javascripts中获取唯一的对象数组

前端之家收集整理的这篇文章主要介绍了如何在javascripts中获取唯一的对象数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Remove duplicates from an array of objects in JavaScript32个
我想获得具有唯一对象的数组.

说我有对象数组

[{"a":"b"},{"c":"d"},{"a":"b"}]

我想要数组的独特价值,即

[{"a":"b"},{"c":"d"}]

有没有最简单的方法来做到这一点.

解决方法

如果一次又一次地包含相同对象的数组,你可以做这样的函数
var oa = {"a":"b"},ob = {"c":"d"};

var array = [oa,ob,oa];

function unique(a) {
    var arr = [];
    for(var i = 0; i < a.length; i++) {
        if( !arr.indexOf(a[i]) == -1 ) {
            arr.push(a[i]);
        }
    }
    return arr; 
}

但这很可能不会起作用,因为即使它们接缝相同的物体也是不同的:

alert( {a: 1} === {a: 1} ); // false

但:

var a = {a: 1};
alert( a === a ); // true

即使这样也是如此:

var a = {a: 1},b = a;

alert( a === b ); // true

所以你也必须测试它(这是一个浅层的caparation.一个级别的对象):

function isEqual(a,b) {
    var prop;
    for( prop in a ) {
        if ( a[prop] !== b[prop] ) return false;
    }
    for( prop in b ) {
        if ( b[prop] !== a[prop] ) return false;
    }
    return true;
}

我们还必须重写我们独特的功能

function unique(a) {
    var isAdded,arr = [];
    for(var i = 0; i < a.length; i++) {
        isAdded = arr.some(function(v) {
            return isEqual(v,a[i]);
        });
        if( !isAdded ) {
            arr.push(a[i]);
        }
    }
    return arr; 
}

完整代码

var a = [{"a":"b"},{"a":"b"}],b = unique(a); // [{"a":"b"},{"c":"d"}]

function unique(a) {
    var isAdded,a[i]);
        });
        if( !isAdded ) {
            arr.push(a[i]);
        }
    }
    return arr; 
}
function isEqual(a,b) {
    var prop;
    for( prop in a ) {
        if ( a[prop] !== b[prop] ) return false;
    }
    for( prop in b ) {
        if ( b[prop] !== a[prop] ) return false;
    }
    return true;
}

注意某些方法的使用取决于ECMAScript第5版:

Array.some
Array.indexOf

猜你在找的JavaScript相关文章