Сортировать массив объектов по значению в массиве каждого объекта - PullRequest
0 голосов
/ 03 ноября 2019

Я не уверен, правильно ли я написал этот вопрос, однако .. У меня есть этот массив объектов:

[
 {
   foo: 'Google',
   bar: 'Bing',
   pro: [
      'One',
      'Two',
      'Three'
   ]
 },
 {
   foo: 'Random string',
   bar: 'Something',
   pro: [
      'Five'
   ]
 },
 {
   foo: 'String',
   bar: 'Game',
   pro: [
      'Ten',
      'One'
   ]
 },

 // ...

]

И мне нужно отсортировать его по свойству pro, где любой из массиваэлементы содержат text. Количество элементов массива неизвестно, но по крайней мере 1.

Где я застрял с логикой:

var text = 'On';

var results = arr.sort(function(a, b) {
  // do another loop, than count and than check?
});

В этом примере и после успешной сортировкифункция, порядок объектов должен стать 0, 3, 2 или 3, 0, 3, потому что On существует в двух из них.

Спасибо за любую помощь

1 Ответ

1 голос
/ 03 ноября 2019

Вы можете написать короткую функцию, чтобы проверить, начинается ли значение со значения text, а затем использовать его в качестве входа для pro.some() в вашей функции сортировки, сортируя b перед a, чтобы отсортировать по убываниюзаказ.

const arr = [{
    foo: 'Google',
    bar: 'Bing',
    pro: [
      'One',
      'Two',
      'Three'
    ]
  },
  {
    foo: 'Random string',
    bar: 'Something',
    pro: [
      'Five'
    ]
  },
  {
    foo: 'String',
    bar: 'Game',
    pro: [
      'Ten',
      'One'
    ]
  }
];
const text = 'On';
const hastext = v => v.indexOf(text) == 0;

arr.sort((a, b) =>
  b.pro.some(hastext) - a.pro.some(hastext)
);

console.log(arr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...