#javascript #arrays #unique
#javascript #массивы #уникальный
Вопрос:
У меня есть такой объект:
object["key1"] = "text1"
object["key2"] = "text2"
object["key3"] = "text1"
object["key4"] = "text3"
Как я могу выдавать (например, оповещать) элементы с одинаковыми значениями (text1, text2 и так далее)?
В приведенном выше примере это должно быть object["key1"]
и object["key2"]
.
Спасибо
Комментарии:
1. Гм … перебирать массив и проверять каждое значение?
2. Это не массив, это объект. Массивы в JavaScript имеют только числовые ключи.
3. Я полагаю, вы имеете в виду
object['key1']
иobject['key3']
?
Ответ №1:
Вы можете «инвертировать» свой объект (свойства становятся значениями, значения становятся свойствами):
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(', '));
}
}
Ответ №2:
Я отсортировал массив, а затем подумал, что вы захотите предупреждать или выполнять какие-либо функции только один раз для каждого повторяющегося элемента. ПРЕДУПРЕЖДЕНИЕ: сортировка может усложняться из-за размера массива http://jsfiddle.net/SPQJ7 / Вышеупомянутая скрипка уже настроена и работает с несколькими повторными элементами
Ответ №3:
Я обновил свой скрипт
http://jsfiddle.net/HerrSerker/LAnRt/
Это не проверяет идентичность в комплексных значениях, только для равенства (см. Пример foo)