javascript - js menentukan sama ada tatasusunan diulang
typecho
typecho 2017-07-05 10:57:12
0
5
1108

Bagaimana js menentukan sama ada terdapat nilai pendua dalam objek tatasusunan, dan padamkan nilai pendua untuk menyimpan hanya satu
Sebagai contoh var arr = [{name:'a'},{name:'b'},{name:'c'},{name:'d'},{name:'a'}] Cara membandingkan

typecho
typecho

Following the voice in heart.

membalas semua(5)
伊谢尔伦

Anda boleh menemuinya dengan gelung berganda, bandingkan yang pertama dengan yang berikut, padamkannya jika diulang, cari dari yang kedua, bandingkannya ke belakang, dan padamkannya jika diulang

const del = (arr) => {
    for( let i=0;i<arr.length;i++) {
        for(let j=i+1;j<arr.length;j++) {
            if (arr[i].id==arr[j].id) {
                arr.splice(j,1);
                i--;
            }
        }
    }
    return arr;
}
伊谢尔伦

Ditulis sesuka hati. . . Tidak pasti jika semua keperluan dipenuhi. . . Haha

Kaedah 1:

const del = (arr)=>{
  let map = [];
  for(let i = 0; i < arr.length; i++) {
    let key = JSON.stringify(arr[i]);
    if(map.includes(key)) {
        arr.splice(i, 1);
        i--;
    } else {
        map.push(key);
    }
  }

  return arr;
}

Kaedah 2:

const del = arr=>Array.from(new Set(arr.map(a=>JSON.stringify(a)))).map(a=>JSON.parse(a))
習慣沉默

temp.indexOf ( arr[i].name ) = -1;

res.push(arr[i]);

Terdapat banyak kaedah untuk menyahduplikasi tatasusunan, dan anda boleh mempunyai kaedah yang lebih baik

ringa_lee

Bahan mentah

arr ialah tatasusunan satu dimensi dan unsur-unsurnya ialah objek. Kandungan yang akan diproses ialah atribut name di bawah objek.

var arr = [{name:'a'},{name:'b'},{name:'c'},{name:'d'},{name:'a'}]

Memproses idea

Lintasinya, kemudian bandingkan satu persatu setiap kali item 基础上再遍历一次 arr dilalui Jika pendua ditemui, tinggalkan rekod

var logger = (a, b) => {
    console.group('谁重复了?');
    console.log('元素:', a); 
    console.log('下标:', b);
    console.groupEnd(); 
}

// 遍历 
arr.filter((item, idx, its) => {
    // 一旦发现有重复的元素就返回 true  (通过 its.some 注意他的两个参数 e 和 idx2)
    // 无重复的过滤掉  
    return its.some((e, idx2) => {
        return (e.name === item.name && idx2 !== idx); 
    });
}).forEach(logger); 

ScreenShot

我想大声告诉你

// Penyahduaan tatasusunan
// Kunci bermaksud penyahduaan tatasusunan yang kompleks, yang berdasarkan kekunci atribut objek dalam tatasusunan
fungsi arrUniq(arr, kunci) {

if (!Array.isArray(arr) || arr.length < 2) {
    return arr;
}

// 简单数组去重
if (!key) {
    return Array.from(new Set(arr));
}

// 复杂数组去重
var obj = {},
    res = [];

arr.forEach((item) => {
    if (!obj[item[key]]) {
        res.push(item);
        obj[item[key]] = true;
    }
});

return res;

}

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan