Уникальные элементы массива Javascript

#javascript #arrays #unique

#javascript #массивы #уникальный

Вопрос:

У меня есть такой массив, как этот:

 var data = [
            { Group: 'A', Name: 'SD' },
            { Group: 'B', Name: 'FI' },
            { Group: 'A', Name: 'MM' },            
            { Group: 'B', Name: 'CO' }
           ];
  

Я хочу получить только уникальные значения группы в массиве, подобном:

 var unique = ['A','B'];
  

Я просмотрел некоторые примеры на SO, но я их не понимаю. Кто-нибудь может сказать мне, как я должен это сделать?

Ответ №1:

 var data = [
             { Group: 'A', Name: 'SD' },
             { Group: 'B', Name: 'FI' },
             { Group: 'A', Name: 'MM' },            
             { Group: 'B', Name: 'CO' }
           ];

var set = {};
for (var i = 0; i < data.length; i  )
    set[data[i].Group] = 1;

var arr = [];
for(var key in set)
    arr.push(key);

alert(arr);
  

Комментарии:

1. Замените этот цикл на arr = Object.keys(set)

2. К вашему сведению, Object.keys это новое в ECMAScript 5, поэтому оно может быть доступно не во всех браузерах ( ссылка )

3. @PetarIvanov Это отлично работает в IE9. К вашему сведению, это не будет работать в IE < 9. Есть предложения о том, как я должен это делать без Object.keys() ?

4. @user686924: смотрите developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…

5. @user686924: я вернулся к своему первоначальному решению, которое не использует Object.keys

Ответ №2:

Если вы используете ES6 / ES2015 или более поздние версии, вы можете сделать это таким образом:

 var unique = [...new Set(data.map(item => item.Group))];
  

Вот пример того, как это сделать.