第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

有沒有數(shù)組中對(duì)象去重的辦法?

有沒有數(shù)組中對(duì)象去重的辦法?

明月笑刀無情 2019-03-20 17:19:55
如下一個(gè)數(shù)組,怎么去除其中的重復(fù)對(duì)象,求大神給個(gè)方法,謝謝啊arr = [{orgId:"100",orgName:"信息組"},{orgId:"100",orgName:"信息組"},{orgId:"100",orgName:"信息組"},{orgId:"81",orgName:"安全組"},{orgId:"11",orgName:"秘書組"},{orgId:"81",orgName:"安全組"}]
查看完整描述

11 回答

?
慕桂英3389331

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊

var arr = [

  { orgId: '100', orgName: '信息組' },

  { orgId: '100', orgName: '信息組' },

  { orgId: '100', orgName: '信息組' },

  { orgId: '81', orgName: '安全組' },

  { orgId: '11', orgName: '秘書組' },

  { orgId: '81', orgName: '安全組' },

];


Object.values(

  arr.reduce((obj, next) => {

    var key = JSON.stringify(next);

    return (obj[key] = next), obj;

  }, {}),

);

我來個(gè)最簡(jiǎn)單的,but 有個(gè)缺點(diǎn),arr里面的對(duì)象必須能被 JSON.stringify 處理


查看完整回答
反對(duì) 回復(fù) 2019-03-22
?
一只斗牛犬

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊

stringify那位兄弟的去重方法是可以的(之前說穩(wěn)健是不對(duì)的,還不夠穩(wěn)?。?br/>不過代碼也是要考慮實(shí)際業(yè)務(wù)場(chǎng)景的,這樣的數(shù)組數(shù)據(jù)是怎么來的呢?
orgId是不是已經(jīng)就是有著 唯一Id 的作用的,是不是 orgId 一致的對(duì)象,就代表著對(duì)象是一致的。如果是的話,那就沒必要stringify了,直接拿orgId當(dāng)key去重就好了

查看完整回答
反對(duì) 回復(fù) 2019-03-22
?
皈依舞

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊

這個(gè)自己思考下啊,動(dòng)動(dòng)手,遍歷一下數(shù)組,然后把沒有出現(xiàn)的元素放到一個(gè)新數(shù)組返回啊


查看完整回答
反對(duì) 回復(fù) 2019-03-22
?
慕妹3146593

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊


Array.prototype.removeRepeatAttr = function(){

    var tmp = {}, a = this.slice();

    for(var i = j = 0; i < a.length; i++){

        if(!tmp[a[i].orgId]){

            tmp[a[i].orgId] = !0;

            j++;

        }else{

            this.splice(j, 1);

        }

    };

}


var arr = [];

arr.removeRepeatAttr();


查看完整回答
反對(duì) 回復(fù) 2019-03-22
?
慕后森

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

可以這樣寫


//將對(duì)象元素轉(zhuǎn)換成字符串以作比較  

function obj2key(obj, keys){  

    var n = keys.length,  

        key = [];  

    while(n--){  

        key.push(obj[keys[n]]);  

    }  

    return key.join('|');  

}  

//去重操作  

function uniqeByKeys(array,keys){  

    var arr = [];  

    var hash = {};  

    for (var i = 0, j = array.length; i < j; i++) {  

        var k = obj2key(array[i], keys);  

        if (!(k in hash)) {  

            hash[k] = true;  

            arr .push(array[i]);  

        }  

    }  

    return arr ;  

}  

var array = [

{orgId:"100",orgName:"信息組"},

{orgId:"100",orgName:"信息組"},

{orgId:"100",orgName:"信息組"},

{orgId:"81",orgName:"安全組"},

{orgId:"11",orgName:"秘書組"},

{orgId:"81",orgName:"安全組"}

]


//進(jìn)行去重  

var arr = uniqeByKeys(array,['orgId','orgName']);  

斜體文字


查看完整回答
反對(duì) 回復(fù) 2019-03-22
?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊

可以了解下es6的set:


function dedupe(array){

 return Array.from(new Set(array));

}

dedupe([1,1,2,3]) //[1,2,3]


查看完整回答
反對(duì) 回復(fù) 2019-03-22
?
一只甜甜圈

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊

萬能的 reduce


查看完整回答
反對(duì) 回復(fù) 2019-03-22
?
德瑪西亞99

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊

以上答案都不支持排序混亂的情況下,且優(yōu)化一下(避免用Object.values()再進(jìn)行一次迭代),我補(bǔ)充下:


不改變目標(biāo)數(shù)組

因?yàn)橛袆?chuàng)建數(shù)組并追加的行為,且無法result=Array(length)來讓這行為提速,因此這種方式的效率會(huì)被給數(shù)組賦值所拖累。


let arr = [

        { orgId: '100', orgName: '信息組' },

        {  orgName: '信息組', orgId: '100' },

        { orgId: '100', orgName: '01', a: 2 },

        { orgId: '01', orgName: '100', a: 2 },

        { orgId: '81', orgName: '安全組' },

        { orgId: '11', orgName: '秘書組' },

        { orgId: '81', orgName: '安全組' },

    ];

let temp = {},

    result = [],

    idx = -1,

    unit;

arr.forEach( val => {

    unit = Object.keys( val ).map( key => [ key, val[ key ] ] ).sort() + '';

    temp[ unit ]

        || ( result[ ++idx ] = val, temp[ unit ] = 1 ) ;

} );

console.log( result );

改變目標(biāo)數(shù)組

源數(shù)組長(zhǎng)度越大,越突顯性能


let temp = {},

    { length } = arr;


for ( let idx = 0; idx < length; idx++ ) {

    let val = arr[ idx ],

        unit = Object.keys( val ).map( key => [ key, val[ key ] ] ).sort() + '';

    temp[ unit ]

         ? ( arr.splice( idx, 1 ), idx--, length-- )

        : temp[ unit ] = 1

};

console.log( arr );


查看完整回答
反對(duì) 回復(fù) 2019-03-22
  • 11 回答
  • 0 關(guān)注
  • 1735 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)