[英]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);
如果要使用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);
您可以像这样过滤特定键的数据。
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}
尝试这个 :
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.