0

Что-то совсем не получается отфильтровать данный массив:

[ { num: 'iv', group: 'p', title: '1' },
  { num: 'iv', group: 'p', title: '2' },
  { num: 'v', group: 'p', title: '3' },
  { num: 'iv', group: 'n', title: '4' },
  { num: 'iv', group: 'p', title: '5' },
  { num: 'iv', group: 'm', title: '6' },
  { num: 'vi', group: 'p', title: '7' } ]

Нужно отфильтровать объекты с одинаковыми значениями в num и group, чтобы на выходе получить

[ { num: 'iv', group: 'p', title: '1' },
  { num: 'v', group: 'p', title: '3' },
  { num: 'iv', group: 'n', title: '4' },
  { num: 'iv', group: 'm', title: '6' },
  { num: 'vi', group: 'p', title: '7' } ]

Отфильтровать по одному полю получается:

var used = {};
var clean = arr.filter(function(obj, i) {
    return (obj.num in used) ? 0 : (used[obj.num] = 1);
});

А вот по двум полям сравнить ну никак не получается.

2 ответа 2

0

Не знаю, может это выглядит тупо, но так попробуйте

var clean = arr.filter(function(obj, i) {
return (obj.num+obj.group in used) ? 0 :
(used[obj.num+obj.group]= 1);
});
0
var clean = arr.filter(function(obj, i) {
    return (obj.group in used && obj.num in used) ? '' : (used[obj.group] = 1) && (used[obj.num] = 1);
});

С массивом в первом посте все норм работает, а вот если массив увеличить, к пример

var arr = [ { group: 'group-sedan', num: 'iv' },
   { group: 'group-sedan', num: 'iv' },
   { group: 'group-wagon_5', num: 'iv' },
   { group: 'group-wagon_5', num: 'iv' },
   { group: 'group-sedan', num: 'iii' },
   { group: 'group-sedan', num: 'iii' },
   { group: 'group-wagon_5', num: 'iii' },
   { group: 'group-wagon_5', num: 'iii' },
   { group: 'group-wagon_5', num: 'ii' },
   { group: 'group-wagon_5', num: 'ii' },
   { group: 'group-sedan', num: 'ii' },
   { group: 'group-sedan', num: 'ii' },
   { group: 'group-coupe', num: 'i' },
   { group: 'group-coupe', num: 'i' },
   { group: 'group-sedan', num: 'i' },
   { group: 'group-sedan', num: 'i' } ]

Получим 5 объектов, а нужно получить 8

6
  • Вновь открываю вопрос. Что то не так, не правильно работает.
    – webphp
    19 сен 2014 в 18:23
  • Как это неправильно? Он выдает именно тот список, который вы и просили сформировать в вопросе.
    – smackmychi
    19 сен 2014 в 18:47
  • тоже самое ) Что интересно, он работает 2 цикла, а потом начинает резать все где встречается num или group
    – webphp
    19 сен 2014 в 18:50
  • @webphp А какой символ?
    – smackmychi
    21 сен 2014 в 7:41
  • Ничего особенного, просто вместо + прописал + ':' + Но не принципиально.
    – webphp
    21 сен 2014 в 14:59

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.