然而,如果我們更全面地考慮它,我們應該考慮到JS數組中的數據類型可以是多種多樣的(可能是對象、數組、字符串...).
所以我寫了壹個更復雜的,可能效率不高,可以慢慢優化:
(函數(){
功能?is object(o)?{
回歸?object . prototype . tostring . call(o)?===?【對象?對象】‘;
}
功能?伊薩雷(o)?{
回歸?object . prototype . tostring . call(o)?===?【對象?數組】‘;
}
功能?重復(arr)?{
var?tmp
如果?(!arr?||?長度是多少?===?0)?{
回歸?[];
}
為了什麽?(var?我?=?0,?萊恩。=?數組長度;?我?& lt?len?i++)?{
tmp?=?arr【I】;
如果?(艾薩裏(tmp))?{
為了什麽?(var?j?=?我?+?1;?j?& lt?len?j++)?{
如果?(isArray(arr【j】)?& amp& amp?tmp .長度?===?arr【j】。長度)?{
var?旗幟?=?假的;
為了什麽?(var?k?=?0;?k?& lt?tmp.length?k++)?{
如果?(tmp【k】?!==?arr【j】【k】)?{
旗幟?=?真實;
打破;
}
}
如果?(!flag)?{
拼接(j,?1);
len-;
j-;
}
}
}
}?不然呢?如果?(is object(tmp))?{
為了什麽?(var?j?=?我?+?1;?j?& lt?len?j++)?{
如果?(is object(arr【j】))?{
var?tmpKey?=?[],?objKey?=?[],?旗幟?=?假的;
為了什麽?(var?k?在?tmp)?{
tmp key . push(k);
}
為了什麽?(var?l?在?arr【j】)?{
objkey . push(l);
}
如果?(tmpKey.length?===?objKey.length)?{
為了什麽?(var?鑰匙?在?tmp)?{
如果?(tmp【重點】?!==?arr【j】【key】)?{
旗幟?=?真實;
打破;
}
}
}
如果?(!flag)?{
拼接(j,?1);
len-;
j-;
}
}
}
}?不然呢?{
為了什麽?(var?j?=?我?+?1;?j?& lt?len?j++)?{
如果?(tmp?===?arr【j】)?{
拼接(j,?1);
len-;
j-;
}
}
}
}
回歸?arr
}
var?列表?=?【{“id“:1,?“名稱“:?“AA“},?{“id”:1,?“名稱“:?“AA“},?{“id”:1,?“名稱“:?“AA“},?{“id“:2,?“名稱“:?“BB“}】;
var?ls?=?【{“id“:1,?“名稱“:?“AA“},?{“id”:1,?“名稱“:?“AA“},?[12,?23],?[12,?23],?[12,?23,?34],?{“XXX“:?“yyy”,?“id“:?2},?“aa”,?“aa”,?“AABB“】;
var?列表2?=?副本(列表);
var?ls2?=?副本(ls);
console . log(list 2);
console . log(ls2);
})();我希望能解決這個問題...