Фильтровать объект JavaScript с ключом - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть такой объект javascript,

{
  apple: { .... },
  orange: { ... },
  mango: { ... },
  jackfruit: { ... }
}

и я хочу создать новый объект из этого объекта. Я хочу только значения ключей cetain, например ['mango', apple' ] Есть ли какая-либо функция фильтра для фильтрации этих элементов из этого объекта с использованием этого массива?

Мой результирующий объект должен быть похож на

{
  mango: { ... }
  apple: { ... }
}

Ответы [ 6 ]

0 голосов
/ 27 апреля 2018

Попробуйте это:

var jsObj = {
  apple: "Apple",
  orange: "Orange",
  mango: "Mango",
  jackfruit: "jackFruit"
}

var arr = ['mango', 'apple'];

var newObj = {};

arr.filter(item => newObj[item] = jsObj[item]);

console.log(newObj);
0 голосов
/ 27 апреля 2018

Если вы можете использовать библиотеку Ramda, просто

R.pick(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1, d: 4}
R.pick(['a', 'e', 'f'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1}

См. http://ramdajs.com/docs/#pick

0 голосов
/ 27 апреля 2018

Вы можете фильтровать данные определенных ключей, как это.

var FilteredObjectsByKeys = Object.assign({}, ...['mango', 'apple'].map(x => fruits[x]));
0 голосов
/ 27 апреля 2018

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

function substract(object, keys) {
    return Object.assign({}, ...keys.map(key => ({ [key]: object[key] })));
}

var fruits = { apple: 'a', orange: 'o', mango: 'm', jackfruit: 'j' };

console.log(substract(fruits, ['mango', 'orange']));
0 голосов
/ 27 апреля 2018

Вы можете использовать forEach цикл над массивом, для которого вы хотите получить значение для ключа в fruitsObj

var fruitsObj = {
  apple: {rate: 100},
  orange: { rate: 200 },
  mango: { rate: 300 },
  jackfruit: { rate: 400 }
}

var filterArray = ['mango', 'apple'];
var res = [];
filterArray.forEach((fruit)=> res.push(fruitsObj[fruit]));
console.log(res);

Если вы хотите использовать filter и map, вы можете сначала отфильтровать ключи, а затем использовать map, чтобы получить значение для этих ключей.

var fruitsObj = {
  apple: {rate: 100},
  orange: { rate: 200 },
  mango: { rate: 300 },
  jackfruit: { rate: 400 }
}

var filterArray = ['mango', 'apple'];
var res = Object.keys(fruitsObj).filter(fruitKey => ['mango','apple'].indexOf(fruitKey) !== -1).map(filterKey => fruitsObj[filterKey]);
console.log(res);
0 голосов
/ 27 апреля 2018

Есть ли какая-либо функция фильтра для фильтрации этих объектов из этого объекта используя этот массив?

Да, вы можете использовать reduce метод.

let dict = {
  apple: { color: 'red'},
  orange: { color: 'orange' },
  mango: { color:'green' },
  jackfruit: { color: 'yellow' }
}
let array =  ['mango', 'apple' ]

console.log(array.reduce((obj, key) => ({ ...obj, [key]: dict[key] }), {}));

Другой метод использует функцию destructing.

let dict = {
      apple: { color: 'red'},
      orange: { color: 'orange' },
      mango: { color:'green' },
      jackfruit: { color: 'yellow' }
}
let array =  ['mango', 'apple' ]

console.log((({ mango, apple}) => ({ mango, apple }))(dict));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...