Разрушить объект массивом его ключей - PullRequest
0 голосов
/ 09 ноября 2018

Скажите, что у нас есть такой объект:

let obj = {a: "John", b: "Sarah", c: "Lara", d: "Joseph", e: "Roger"}

И массив некоторых его ключей:

let arr_of_keys = ["a", "d", "e"]

Можно ли деструктурировать объект, используя предопределенные ключи в массиве, что-то вроде:

let {...arr_of_keys} = obj;

Чтобы в итоге получить:

a = "Джон", d = "Иосиф", e = "Роджер"

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вот возможная вспомогательная функция для предоставленной проблемы. Я добавил набор преобразования для удаления возможных дубликатов в целях экономии ресурсов. Также добавлена ​​простая обработка ошибок в виде сообщений об ошибках консоли.

const obj = {a: "John", b: "Sarah", c: "Lara", d: "Joseph", e: "Roger"}

const arr_of_keys = ["a", "d", "e"];


const customObjectDescructurer = (arrayOfDesiredPropKeys, object) => {

  const setOfDesiredPropKeys = new Set(arrayOfDesiredPropKeys);
  
  const filteredObject = [...setOfDesiredPropKeys].reduce(
    (filteredObject, desiredPropKey) => {
      if(object.hasOwnProperty(desiredPropKey)){
        filteredObject[desiredPropKey] = object[desiredPropKey];
      } else {
        console.error(`
          The given ${desiredPropKey}, does not exist in ${object} object.
        `);
      }
      return filteredObject;
    }, {});

  return filteredObject;
  
}


const desiredKeys = customObjectDescructurer(arr_of_keys, obj);

console.log(desiredKeys);
0 голосов
/ 09 ноября 2018

Вы хотите простой .reduce метод, подобный приведенному ниже:

var result = arr_of_keys.reduce(function(o,item){

    if(obj.hasOwnProperty(item)){
        o[item] = obj[item]; 
    }

  return o;
}, {});

Вот пример:

let obj = {a: "John", b: "Sarah", c: "Lara", d: "Joseph", e: "Roger"}
let arr_of_keys = ["a", "d", "e", "f"];

var result = arr_of_keys.reduce(function(o,item){

	if(obj.hasOwnProperty(item)){
  	o[item] = obj[item]; 
  }
  
  return o;
}, {});

console.log(result)

Вот работающий JSFiddle (поскольку встроенный возвращает 503.)

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