Извлечение нескольких значений объекта - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть такой объект:

object["key1"] = "text1"
object["key2"] = "text2"
object["key3"] = "text1"
object["key4"] = "text3"

Как я могу выдавать (например, оповещать) элементы с одинаковыми значениями (text1, text2 и т. Д.)?

InВ приведенном выше примере это должно быть object["key1"] и object["key2"].

Спасибо

Ответы [ 3 ]

4 голосов
/ 30 сентября 2011

Вы можете «инвертировать» ваш объект (свойства становятся значениями, значения становятся свойствами):

var byValue = {};

for (var prop in object) {
    if (!(object[prop] in byValue)) {
        byValue[object[prop]] = [];
    }
    byValue[object[prop]].push(prop);
}

Это должно привести к этой структуре:

{
    'text1': ['key1', 'key3'],
    'text2': ['key2'],
    'text3': ['key4']
}

Затем вы можете обнаружить те значения, которые имели повторяющиеся ключи:

for (var value in byValue) {
    if (byValue[value].length > 1) {
        alert(byValue[value].join(', '));
    }
}
0 голосов
/ 30 сентября 2011

Я отсортировал массив, а затем подумал, что вы хотели бы предупредить, или сделать любой функциональность, только один раз для каждого повторяющегося элемента. ВНИМАНИЕ: сортировка может стать тяжелее с размером массива http://jsfiddle.net/SPQJ7/ Вышеуказанная скрипка уже настроена и работает с несколькими повторными элементами

0 голосов
/ 30 сентября 2011

Я обновил свой скрипт

http://jsfiddle.net/HerrSerker/LAnRt/

Это не проверяет идентичность в комплексных значениях, только на равенство (см. Пример foo)

...