Создать копию массива с отбором

Нужно скопировать массив и при этом вывести сначала значение 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)
  • Ну а потом можно вывести элементы, если надо
→ Ссылка
Автор решения: vsemozhebuty

В вашем варианте есть два недопонимания (как минимум).

  1. Вы создаёте новый массив для результатов res на каждой итерации, что не имеет смысла — там всегда будет или один, или ноль элементов — и при этом в clone будут только undefined, так как вы ничего не возвращаете из функции.

  2. Вы пытаетесь работать с объектом как с массивом вот здесь: 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);

→ Ссылка