Есть два массива объектов:
Первый массив:
[
{id: "as3cdf114gte", name: "qwer", property: "1234"},
{id: "e56cdf1fggte", name: "rqewrq", property: "4322"},
{id: "as3trfgfi4ggf6", name: "qwerwq", property: "12342"}
]
Второй массив:
[
{id: "e56cdf1fggte", data : 1},
{id: "as3cdf114gte", data : 2},
{id: "as3trfgfi4ggf6", data : 4}
]
Как отсортировать второй массив по значению полей id
первого массива?
В итоге должно получиться:
[
{id: "as3cdf114gte", data : 2},
{id: "e56cdf1fggte", data : 1},
{id: "as3trfgfi4ggf6", data : 4}
]
const first = [
{id: "as3cdf114gte", name: "qwer", property: "1234"},
{id: "e56cdf1fggte", name: "rqewrq", property: "4322"},
{id: "as3trfgfi4ggf6", name: "qwerwq", property: "12342"}
];
const second = [
{id: "e56cdf1fggte", data : 1},
{id: "as3cdf114gte", data : 2},
{id: "as3trfgfi4ggf6", data : 4}
];
// Формируем вспомогательный массив из `id` первого массива.
const order = first.map(item => item.id);
// Сортируем второй массив согласно индексам вспомогательного.
second.sort((a, b) => order.indexOf(a.id) - order.indexOf(b.id));
console.log({
first,
second
})
Использованы материалы ответа на вопрос: Сортировка коллекции, где нужно переопределить размеры в нужном порядке
var a = [
{id: "as3cdf114gte", name: "qwer", property: "1234"},
{id: "e56cdf1fggte", name: "rqewrq", property: "4322"},
{id: "as3trfgfi4ggf6", name: "qwerwq", property: "12342"}
];
var b = [
{id: "e56cdf1fggte", data : 1},
{id: "as3cdf114gte", data : 2},
{id: "as3trfgfi4ggf6", data : 4}
];
var c = []; //resulting array
var tindex = 0;
for (i = 0; i < a.length; i++) {
c[i] = {};
tindex = b.findIndex(x => x.id === a[i].id);
c[i].id = b[tindex].id;
c[i].data = b[tindex].data;
}
console.log(c);
Как уже писал в комментах к вопросу, сортировать смысла нет. надо взять "колонку" id
из первого массива в нужном порядке, и составив словарик из второго сформировать результат. Если вы, конечно, опять что-нибудь не упустили в вопросе.
var a = [{id: "as3cdf114gte", name: "qwer", property: "1234"},{id: "e56cdf1fggte", name: "rqewrq", property: "4322"},{id: "as3trfgfi4ggf6", name: "qwerwq", property: "12342"}];
var b = [{id: "e56cdf1fggte", data : 1},{id: "as3cdf114gte", data : 2},{id: "as3trfgfi4ggf6", data : 4}];
var data = b.reduce( (acc, v) => ( acc[v.id] = v.data, acc) , {});
var result = a.map( v => ({ id: v.id, data: data[v.id] }) );
console.log(result);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть задача модифицировать ютубовский плеерУ ютуба есть эмбендная ссылка такого типа - https://www
Задача стоит в том, чтобы понимать где ввод с клавиатуры в где с ридераПроблема: Разница между событиями keyup и keydown нам известна, но я не могу...
В проекте есть семейство шаблонных функций которые принимают аргументы с некоторым ожидаемым интерфейсомПримерно так: