Javascript сначала получает конкретный ключ данных из массива

#javascript #arrays

#javascript #массивы

Вопрос:

у меня есть такой массив

 array[{ channel: "", data: { title: "", type: "", thumbnail: "" } }]
  

для некоторых элементов тип является live,

и я хочу перечислить все элементы, но сначала те, которые имеют тип live for

также я получаю данные с помощью .map для перечисления.

спасибо!

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

1. сначала выполняется только тип сортировки, а что-нибудь еще, похожее на alpahabetical, для какого-либо другого поля в качестве второго критерия?

2. ДА. у меня есть каналы, и я хочу сначала отсортировать жизни, а затем другие

Ответ №1:

Вы можете использовать .sort()

 let arr = [
  { channel: "", data: { title: "", type: "adsfadsf", thumbnail: "" } },
  { channel: "", data: { title: "", type: "live", thumbnail: "" } },
  { channel: "", data: { title: "", type: "live", thumbnail: "" } },
  { channel: "", data: { title: "", type: "blabla", thumbnail: "" } },
  { channel: "", data: { title: "", type: "blubla", thumbnail: "" } },
  { channel: "", data: { title: "", type: "live", thumbnail: "" } },
  { channel: "", data: { title: "", type: "live", thumbnail: "" } },
  { channel: "", data: { title: "", type: "adsfadsf", thumbnail: "" } }
];

let result = [...arr].sort(({ data: { type } }) => (type === "live" ? -1 : 0));

console.log(arr);
console.log(result);  

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

1. спасибо за комментарий. на самом деле я получаю данные с помощью map. возможно ли это сделать в map? приводит данные в состояние

2. @crystalcyber взгляните. здесь вы можете использовать оператор spread [...arr] это не изменит исходный массив

Ответ №2:

 let arr = [
  { channel: "ARD", data: { title: "", type: "", thumbnail: "" } },
  { channel: "ZDF", data: { title: "", type: "live", thumbnail: "" } },
  { channel: "SAT1", data: { title: "", type: "live", thumbnail: "" } },
  { channel: "RTL", data: { title: "", type: "", thumbnail: "" } }
];

let result = arr.sort((a,b) => {
    aType = a.data.type;
    bType = b.data.type;
    if (aType=='live')
        return (bType!='live') ? -1 : a.channel.localeCompare(b.channel.localeCompare);
    else
        return (bType=='live') ? 1 : a.channel.localeCompare(b.channel.localeCompare);
});

console.log(result);