Создать копию массива с отбором
Нужно скопировать массив и при этом вывести сначала значение isAdmin=true, не судите строго пробую в таком виде что то туплю, направьте куда двигаться
let arr= [
{id: 13, name: 'Alex', isAdmin: true, age: 25 },
{id: 18, name: 'Peter', isAdmin: false, age: 35 },
{id: 10, name: 'Jack', isAdmin: false, age: 26 },
{id: 19, name: 'Mary', isAdmin: false, age: 34 },
{id: 7, name: 'Anna', isAdmin: true, age: 19 },
{id: 15, name: 'John', isAdmin: true, age: 22 },
];
let clone = arr.map(item => {
let res = [];
if (item[2]===true ){
res.push(item);
console.log(res);
}
});
Ответы (2 шт):
- Вначале можно склонировать массив
let arrCopy = arr.slice(0); - Потом отсортировать копию
arrCopy.sort(el => el.isAdmin ? -1 : 1) - Ну а потом можно вывести элементы, если надо
В вашем варианте есть два недопонимания (как минимум).
Вы создаёте новый массив для результатов
resна каждой итерации, что не имеет смысла — там всегда будет или один, или ноль элементов — и при этом вcloneбудут толькоundefined, так как вы ничего не возвращаете из функции.Вы пытаетесь работать с объектом как с массивом вот здесь:
item[2]===true— вместо этого должно бытьitem.isAdmin === true.
Ну и map() лучше использовать, когда вы хотите получить новый массив с тем же порядком элементов, но при этом как-то изменить сами элементы.
Вот вариант для коллекции вдобавок к другому ответу, хотя этот выглядит немного заумным.
let arr = [
{id: 13, name: 'Alex', isAdmin: true, age: 25 },
{id: 18, name: 'Peter', isAdmin: false, age: 35 },
{id: 10, name: 'Jack', isAdmin: false, age: 26 },
{id: 19, name: 'Mary', isAdmin: false, age: 34 },
{id: 7, name: 'Anna', isAdmin: true, age: 19 },
{id: 15, name: 'John', isAdmin: true, age: 22 },
];
const copy = arr.reduce(
(acc, item) => {
acc[item.isAdmin ? 'unshift' : 'push'](item);
return acc;
},
[],
);
console.log(copy);