Как получить значение объекта, используя значение массива в качестве ключа - PullRequest
0 голосов
/ 06 мая 2020

У меня есть массив, содержащий несколько значений. У меня также есть объект, содержащий данные.

Теперь я хочу создать объект, который содержит только данные с тем же ключом, что и значение массива.

const array = ["foo", "bar", "foo2", "bar2"]
var obj = {foo:"string1", fue:"string2", bar:"string3"

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

var result = {foo:"string1", bar:"string3"}

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Это будет мой подход:

const obj = { foo:"string1", fue:"string2", bar:"string3" };

const subset = pick(obj, ["foo", "bar", "foo2", "bar2"]);

function pick(obj, props) {
  return props.reduce((result, prop) => {
    return (prop in obj) ? Object.assign(result, { [prop]: obj[prop] }) : result;
  }, {});
}

(Если вы уже используете loda sh, есть метод _.pick, который делает это).

0 голосов
/ 06 мая 2020

Просто переберите ключи объекта и посмотрите, существуют ли они в массиве, используя Array.prototype.includes, и добавьте значения в объект результата

const array = ["foo", "bar", "foo2", "bar2"]
var obj = {foo:"string1", fue:"string2", bar:"string3"}
var result = {};
Object.keys(obj).forEach(key => {
   if(array.includes(key)) {
        result[key] = obj[key];
   }
})

console.log(result)

Также, как указал @Jacob, было бы более эффективно, если бы вы l oop над массивом и выбирали ключи из объекта, если они существуют как ключи доступа от объекта - это операция O (1), тогда как проверка в массиве - операция O (n)

const array = ["foo", "bar", "foo2", "bar2"]
var obj = {foo:"string1", fue:"string2", bar:"string3"}
var result = {};
array.forEach(key => {
   if(obj[key]) {
        result[key] = obj[key];
   }
})

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