Rumah > Soal Jawab > teks badan
var a = ['hello',{hello: '323651',bye: '43434'},[1,2,34],true,10,9,8,10,'true','hello',true ,salah,9,{hello: '312312',ok: 32323},[1,2,34]];
習慣沉默2017-05-19 10:21:12
Untuk nombor, jenis Boolean, dsb., cuma tambahkan penghakiman secara langsung pada penghujungnya, atau tambahkannya bersama-sama Anda akan faham dengan lebih jelas apabila saya menulisnya dengan cara ini.
var a = ['{"1":1,"2":2}', {1:1, 2:2}, 'hello',{hello: '323651',bye: '43434'},[1,2,34],true,10,9,8,10,'true','hello',true,false,9,'9',{hello: '312312',ok: 32323},[1,2,34]];
var json = {};
var arr = [];
for (let i = 0, len = a.length; i < len; i++) {
let str = JSON.stringify(a[i]) + typeof a[i];
if (!json[str]) {
arr.push(a[i]);
}
json[str] = 1;
}
console.log(arr);
巴扎黑2017-05-19 10:21:12
Object vs Object dan Array vs Array diproses secara rekursif, dan kes lain dibandingkan secara langsung.
Penghakiman ===
langsung, jika sama, ia sudah selesai.
Sekiranya berlaku ketidaksamaan, jika objek vs objek atau tatasusunan vs tatasusunan, bandingkan dengan JSON stringify, dan semua yang lain akan baik-baik saja.
怪我咯2017-05-19 10:21:12
Jika jujukan objek adalah berjujukan atau elemen tatasusunan dalaman tersusun tatasusunan, maka elemen itu akan ditukar kepada rentetan dan kemudian dibandingkan.
var arr1 =[...],arr2=[....],arr3=[];
var rst = [];
var process = function(arr){
arr.forEach(funciton(v,i){
var v2s;
if(v.constructor === Object){
v2s = JSON.stringify(v);
} else if( v.constructor === Boolean){
v2s = "'"+v.toString()+"'"
} else {
v2s = v.toString();
}
if (arr3.indexOf(v2s)<0){
arr3.push(v2s);
rst.push(v);
}
})
}
process(arr1);
process(arr2);
console.log(rst);
给我你的怀抱2017-05-19 10:21:12
Sebaik-baiknya gunakan aksara lain untuk memisahkan JSON Jika anda hanya boleh mengekalkannya seperti sekarang, gunakan 'hello' untuk memisahkan tatasusunan, dan kemudian bandingkan untuk mengalih keluar pendua.