#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);