使用键过滤javascript对象

时间:2018-04-27 06:40:18

标签: javascript json ecmascript-6

我有一个像这样的javascript对象,

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

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

我的结果对象应该是

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

6 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

  

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

是的,您可以使用"([a-zA-Z0-9])\\1{1,}" 方法。

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

答案 2 :(得分:0)

您可以在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);




如果您要使用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);




答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

试试这个:

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