реконструировать частично разрушенный объект es6 - PullRequest
0 голосов
/ 09 января 2019

Я ищу самый краткий способ вывести новый объект из полей деконструированного.

let obj = {
    a: 1,
    b: 2,
    c: null
}

В настоящее время у меня есть:

let {a, c} = obj;

let data = {a, c}

Что бы я хотел иметь:

let data = {a, c} = obj;
// but data actually becomes {a, b, c}
// and not {a, b} as I wished it to be.

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Хотя ваш код выглядит нормально, возможно, если ваша задача состоит из вишнёвых ключей и поместить его в другой объект, деструктуризация - не лучший подход:

const object = { a: 5, b: 6, c: 7  };
const picked = (({ a, c }) => ({ a, c }))(object);
0 голосов
/ 09 января 2019

Вместо того, чтобы полагаться на деструктуризацию для этого, вы можете реализовать версию часто встречающейся функции «выбора» , которая принимает в качестве входных данных объект и массив ключей для извлечения из этого объекта:

function pick(obj, keys) {
  return keys.reduce((memo, key) => {
    memo[key] = obj[key];
    return memo;
  }, {});
}

const obj = { a: 1, b: 2, c: 3 }
const data = pick(obj, ['a', 'b']); 

console.log(data); // { a: 1, b: 2}

Обычно я считаю производительность менее важной, чем удобочитаемость, которая очень субъективна. Но в этом случае и решение pick, приведенное выше, и однострочные на несколько порядков медленнее, чем исходный двухсторонний, хотя pick выигрывает у однострочников со сравнительно небольшим отрывом: https://jsperf.com/testaagwt14124oih1oij

0 голосов
/ 09 января 2019

Вы можете определить функцию, которая будет предоставлять деструктурированный объект в качестве возвращаемого значения, и назначить вызов data:

const obj = {
  a: 1,
  b: 2,
  c: null
}
const partial = ({ a, c }) => ({ a, c })

const data = partial(obj)
console.log(data)

К сожалению, это невозможно в одной строке без какой-либо настройки, но установка того стоит, если вы создаете один и тот же частичный объект во многих местах в вашем источнике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...