繁体   English   中英

使用键过滤javascript对象

[英]Filter javascript object with key

我有一个这样的 javascript 对象,

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

我想从这个对象中生成一个新对象。 我只想要 cetain 键的值,例如['mango', apple' ]是否有任何过滤器功能可以使用此数组从该对象中过滤这些项目?

我生成的对象应该像

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

您可以分散单个对象并将它们分配给一个新对象。

 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']));

是否有任何过滤器功能可以使用此数组从该对象中过滤这些项目?

是的,您可以使用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));

您可以在要获取fruitsObj键值的数组上使用forEach循环

 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);

如果要使用filtermap ,可以先过滤掉键,然后使用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);

您可以像这样过滤特定键的数据。

var FilteredObjectsByKeys = Object.assign({}, ...['mango', 'apple'].map(x => fruits[x]));

如果你可以使用 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

尝试这个 :

 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM