Извлечение ключей и значений из объекта через массив строк в javascript - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть некоторые данные API, которые возвращаются как объект:

    {
        "name": "Luke Skywalker",
        "height": "172",
        "mass": "77",
        "hair_color": "blond",
        "skin_color": "fair",
        "eye_color": "blue",
        "birth_year": "19BBY",
        "gender": "male"
}

У меня есть список ключей в массиве конфигурации, которые мне интересно извлечь из исходного ответа:

let attributes = ['name', 'height', 'mass'];

Как использовать массив атрибутов, чтобы вернуть мне объект, например так:

{
        "name": "Luke Skywalker",
        "height": "172",
        "mass": "77"
}

Ответы [ 5 ]

3 голосов
/ 06 февраля 2020

Использование reduce будет упрощено.

const update = (data, attrs) =>
  attrs.reduce((acc, attr) => (acc[attr] = data[attr], acc), {});

const data = {
  name: "Luke Skywalker",
  height: "172",
  mass: "77",
  hair_color: "blond",
  skin_color: "fair",
  eye_color: "blue",
  birth_year: "19BBY",
  gender: "male"
};

let attributes = ["name", "height", "mass"];

console.log(update(data, attributes));
3 голосов
/ 06 февраля 2020

Вы можете просто l oop по вашему массиву:

const obj = {
        "name": "Luke Skywalker",
        "height": "172",
        "mass": "77",
        "hair_color": "blond",
        "skin_color": "fair",
        "eye_color": "blue",
        "birth_year": "19BBY",
        "gender": "male"
};

let attributes = ['name', 'height', 'mass'];

function buildObject(arr, obj) {
  const res = {};
  arr.forEach(item => res[item] = obj[item])
  return res
}

console.log(buildObject(attributes, obj))
2 голосов
/ 06 февраля 2020

Вы можете отобразить требуемый ключ вместе с его значениями и построить из него новый объект с помощью Object.fromEntries.

let obj = { name: "Luke Skywalker", height: "172", mass: "77", hair_color: "blond", skin_color: "fair", eye_color: "blue", birth_year: "19BBY", gender: "male" },
    attributes = ['name', 'height', 'mass'],
    picked = Object.fromEntries(attributes.map(k => [k, obj[k]]));

console.log(picked);
2 голосов
/ 06 февраля 2020

Вы можете использовать функцию reduce для построения нужного объекта.

let obj = {"name": "Luke Skywalker","height": "172","mass": "77","hair_color": "blond","skin_color": "fair","eye_color": "blue","birth_year": "19BBY","gender": "male"},
    attributes = ['name', 'height', 'mass'],
    {result} = attributes.reduce((a, c) => (Object.assign(a.result, {[c]: a.source[c]}), a), {result: Object.create(null), source: obj});
    
console.log(result);
2 голосов
/ 06 февраля 2020

Вы можете использовать Object.entries метод.

let obj = {
  "name": "Luke Skywalker",
  "height": "172",
  "mass": "77",
  "hair_color": "blond",
  "skin_color": "fair",
  "eye_color": "blue",
  "birth_year": "19BBY",
  "gender": "male"
};
let attributes = ['name', 'height', 'mass'];
let picked = Object.fromEntries(
  attributes.map(att => [att, obj[att]])
)
console.log(picked);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...