Как я могу “отфильтровать” JSON для пар имя/значение уникального ключа?

так же, как вы удаляете дубликаты из любого другого ArrayList ...

Например:

tmp.stream().distinct().collect(Collectors.toList());

Примечание: предполагается, что элементы списка реализуют подходящий метод equals. Как они должны.

5
задан Patrick Murphy 12 October 2015 в 19:40
поделиться

3 ответа

Я преобразовал бы массив маркеров к паре значения ключа и затем циклу, который возражает свойствам.

var markers = [{"language":"Hungarian","group":"a", "value":"yes"}, 
  {"language":"English", "group":"a", "value":"yes"}, 
  {"language":"Ewe", "group":"b", "value":"no"},
  {"language":"French", "group":"c", "value":"NA"}];

var uniqueGroups = {};
$.each(markers, function() {
  uniqueGroups[this.group] = this.value;
});

затем

$.each(uniqueGroups, function(g) {
  $('<p>').html('<img src="http://mysite/group' + g + '.png\" />' + this).appendTo('#legend-contents');
});

или

for(var g in uniqueGroups)
{
  $('<p>').html('<img src="http://mysite/group' + g + '.png\" />' + uniqueGroups[g]).appendTo('#legend-contents');
}

Этот пример кода перезаписывает уникальное значение с последним значением в цикле. Если Вы хотите использовать первое значение вместо этого, необходимо будет выполнить некоторую условную проверку, чтобы видеть, существует ли ключ.

7
ответ дан 14 December 2019 в 01:18
поделиться

Посмотрите это - Лучший способ запросить назад уникальные значения атрибута в массиве JavaScript объектов?

Вам просто нужно изменение, которое проверяет на 2 значения, а не 1.

0
ответ дан 14 December 2019 в 01:18
поделиться

Как насчет чего-то более универсального?

function getDistinct(o, attr)
{
 var answer = {};
 $.each(o, function(index, record) {
   answer[index[attr]] = answer[index[attr]] || [];
   answer[index[attr]].push(record);
 });

 return answer;    //return an object that has an entry for each unique value of attr in o as key, values will be an array of all the records that had this particular attr.
}

Не только такая функция возвратила бы все отличные значения, которые Вы указываете, но она также сгруппирует их, если необходимо получить доступ к ним.

В Вашем образце Вы использовали бы:

$.each(getDistinct(markers, "group"), function(groupName, recordArray)
{ var firstRecord = recordArray[0];
        $('<p>').html('<img src="http://mysite/group' + groupName+ '.png\" />' + firstRecord.value).appendTo('#legend-contents');

}
2
ответ дан 14 December 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: