Лучший способ запросить обратно уникальные значения атрибута в массиве объектов JavaScript? - PullRequest
3 голосов
/ 26 февраля 2009

Какой будет лучший (или самый быстрый) способ найти все возможные значения «foo» в следующем примере массива.

var table = [
    {foo: 0, bar:"htns", stuff:123},
    {foo: 2, bar:"snhn", stuff:156},
    {foo: 5, bar:"trltw", stuff:45},
    {foo: 5, bar:"lrctm", stuff:564},
    //few thousand lines later
    {foo: 2596, bar:"cns", stuff:321},
    {foo: 2597, bar:"gcrl", stuff:741}
];

Ответы [ 2 ]

6 голосов
/ 26 февраля 2009

Перебрать массив и поместить значения в хеш (объект). Это алгоритм O (n).

var result = {};
for(var i=0; i<table.length; i++) {
    result[table[i].foo] = 1; //the value can be anything
}

//now read back the unique values
for (i in result) {
    if (result.hasOwnProperty(i)) { 
        console.log(i);
    }
}
3 голосов
/ 26 февраля 2009

Это типичная версия ответа Четана:

var result = {};
for(var i = 0; i < table.length; ++i) {
    var value = table[i].foo;
    result[(typeof value) + ' ' + value] = value;
}

for(id in result) {
    if(result.hasOwnProperty(id)) { 
        console.log(result[id]);
    }
}

Тем не менее, он все равно будет поврежден для объектов: пока метод toString() не был перезаписан, все они имеют строковое представление '[object Object]'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...