Как вытащить массив с выборочными св-ми через деструктурирующее присваивание в JS?

Как записать массив 'users' в переменную из объекта, с выборочными св-ми через деструктурирующее присваивание в JS?

Например с св-ми id и poor (пример объекта ниже)
P.S. Элементов у users может быть больше 2

// Пример объекта
const testArr = {
    title: "test",
    users: [
        {
            id: 1,
            poor: false,
            sex: "man"
        },
        {
            id: 2,
            poor: true,
            sex: "woman"
        }
    ]
}


// Нужный результат:
let users = [
    {
        id: 1,
        poor: false
    },
    {
        id: 2,
        poor: true
    }
]

Ответы (4 шт):

Автор решения: Yaant

// Пример объекта
const testArr = {
    title: "test",
    users: [
        {
            id: 1,
            poor: false,
            sex: "man"
        },
        {
            id: 2,
            poor: true,
            sex: "woman"
        }
    ]
}

let { users } = testArr;
users = users.map(({id, poor}) => ({id, poor}));
console.log(users);

→ Ссылка
Автор решения: DiD

Это будет немного коряво. Но деструктурирующим способом лучше не получится.

const testArr = {
    title: "test",
    users: [
        {
            id: 1,
            poor: false,
            sex: "man"
        },
        {
            id: 2,
            poor: true,
            sex: "woman"
        }
    ]
}

const {users:[{id,poor},{id:id2,poor:poor2}]} = testArr;

const result = [{id,poor},{id:id2,poor:poor2}];

console.log(result);

→ Ссылка
Автор решения: vp_arth

Если говорить только о деструктурировании, то синтаксис такой:

// Пример объекта
const testArr = {
    title: "test",
    users: [
        {id: 1, poor: false, sex: "man"},
        {id: 2, poor: true, sex: "woman"}
    ]
};

const {users: [{sex: _1, ...user1}, {sex: _2, ...user2}]} = testArr;

console.log(JSON.stringify([user1, user2]));

Вы просто биндите ненужные свойства в dummy переменные.
Но для массива это малопрактично, т.к. в ок. 100% случаев длина неизвестна.

лучше просто замаппить нужные данные:

// Пример объекта
const testArr = {
    title: "test",
    users: [
        {id: 1, poor: false, sex: "man"},
        {id: 2, poor: true, sex: "woman"}
    ]
};

{
  // Всё, кроме sex
  const users  = testArr.users.map(user => {const {sex: _, ...u} = user; return u;});
  const users0 = testArr.users.map(({sex, ...user}) => user);
  console.log(JSON.stringify(users));
  console.log(JSON.stringify(users0));
}
{
  // Перечисление полей
  const users  = testArr.users.map(user => {const {id, poor} = user; return {id, poor};});
  const users0 = testArr.users.map(({id, poor}) => ({id, poor}));
  const users1 = testArr.users.map(user => ({id: user.id, poor: user.poor}));
  console.log(JSON.stringify(users));
  console.log(JSON.stringify(users0));
  console.log(JSON.stringify(users1));
}

→ Ссылка
Автор решения: Frog Frogov

Всем спасибо за ответы!


Понял что деструктуризация не подходит для этих целей, на основе ваших ответов создал свою функцию ( аналогичная кстати есть в lodash (pick) ) :P

// Данные
const testArr = {
    title: "test",
    users: [
        {
            id: 1,
            poor: false,
            sex: "man"
        },
        {
            id: 2,
            poor: true,
            sex: "woman"
        }
    ]
}


// Достаем users
let { users } = testArr;


// Парсим users
const filterArrToExistProps = (items = [], ...properties) => {
  return items.map(item => {

    const newObj = {};
    properties.forEach(prop => {
      item.hasOwnProperty(prop) && (newObj[prop] = item[prop]);
    });

    return newObj;
  });
};


// Выводим
console.log( filterArrToExistProps( users, "id", "poop" ) );


P.S (обновленный ответ).
спасибо @Yaant и остальным:

    testArr.users.map(({id, sex}) => ({ id, sex }) )
→ Ссылка