【问题标题】:Filter javascript object with key使用键过滤 javascript 对象
【发布时间】:2018-10-07 23:05:27
【问题描述】:

我有一个这样的 javascript 对象,

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

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

我的结果对象应该是这样的

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

【问题讨论】:

  • Object.keys(obj).filter(r => ['mango','apple'].indexOf(r) > -1).map(i => obj[i]); 应该足够了。
  • @Pranav,它对你有用吗?
  • @briosheje 它不工作。它返回芒果和苹果的值数组

标签: javascript json ecmascript-6


【解决方案1】:

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

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

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

console.log(subtract(fruits, ['mango', 'orange']));

【讨论】:

  • 确实很聪明。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          试试这个:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-06-23
            • 2023-04-09
            • 2022-09-24
            • 1970-01-01
            • 2020-05-29
            • 2015-09-28
            • 1970-01-01
            相关资源
            最近更新 更多