4

Web サービスからこの種のリストがあります。ユーザー名の重複をなくしたい:

Mylist = [{
    "username": "Plr1",
    "is_online": true,
    "email": null,
    "message": null,
    "direction": 1,
    "image_url": ""
}, {
    "username": "plr2",
    "is_online": false,
    "email": "",
    "message": null,
    "direction": 1,
    "image_url": ""
}, {
    "username": "plr1",
    "is_online": false,
    "email": "",
    "message": null,
    "direction": 1,
    "image_url": null
}];

重複した値 (要素の 1 つ = Plr1) を削除できる関数はありますか?

4

3 に答える 3

3

Array.filterを使用できます

var Mylist = [{"username":"Plr1","is_online":true,"email":null,"message":null,"direction":1,"image_url":""},{"username":"plr2","is_online":false,"email":"","message":null,"direction":1,"image_url":""},{"username":"plr1","is_online":false,"email":"","message":null,"direction":1,"image_url":null} ];
var keys = [];
var newList = Mylist.filter(
    function(x){ 
        var val = x.username.toLowerCase();
        if (!keys[val]) {
            keys[val] = true;
            return true;
        }
        return false;
    }
);
keys = null;
console.log(newList);

古いブラウザではそのままでは機能しません。上記に投稿したリンクを見ると、それらを機能させるための pollyfill があります。

于 2013-05-03T11:06:28.247 に答える
1

デモ: http://jsfiddle.net/abc123/ZgYbB/

注: 最後の for ループは、項目が削除され、配列に何が残っているかを示すためのものです。

JS:

var Mylist= [{"username":"Plr1","is_online":true,"email":null,"message":null,"direction":1,"image_url":""},{"username":"plr2","is_online":false,"email":"","message":null,"direction":1,"image_url":""},{"username":"plr1","is_online":false,"email":"","message":null,"direction":1,"image_url":null} ];

for (var i = 0; i < Mylist.length; i++) {
    for(var j = i + 1; j < Mylist.length; j++) {
        if(Mylist[i].username.toLowerCase() == Mylist[j].username.toLowerCase())
            Mylist.splice(j, 1);
    }
}

//Not needed just proof that items were removed.
for (var i = 0; i < Mylist.length; i++) {
   alert(Mylist[i].username);
}
于 2013-05-03T11:06:44.750 に答える
1

これはあなたが望むことをします(大文字と小文字を区別しないユーザー名の比較を探していると仮定します)。

編集してデモを追加: http://jsfiddle.net/vBZhR/

var Mylist= [{"username":"Plr1","is_online":true,"email":null,"message":null,"direction":1,"image_url":""},{"username":"plr2","is_online":false,"email":"","message":null,"direction":1,"image_url":""},{"username":"plr1","is_online":false,"email":"","message":null,"direction":1,"image_url":null} ];

dedupe(Mylist);
function dedupe(list) {
    var usernames = {};
    for (var i in list) {
        if (usernames[list[i].username.toLowerCase()]) {
            list.splice(i, 1);
        } else {
            usernames[list[i].username.toLowerCase()] = true;
        }
    }
    return list;
}
于 2013-05-03T11:03:09.660 に答える