【问题标题】:Lodash get all Objects which has a keyLodash 获取所有具有密钥的对象
【发布时间】:2017-07-30 14:25:28
【问题描述】:

我正在寻找具有键的过滤对象

这是我的对象

 var mydevices=    {
      "Object1": {
        "name": "name1",
        "category": "laptop"
      },
      "Object2": {
        "name": "name2",
        "category": "laptop"
      },
      "Object3": {
        "name": "name3",
        "category": "Desktop"
      },
      "Object4": {
        "name": "name4",
        "category": "Mobile"
      }
    }

我的过滤键是数组

var filterKeyArray=["Mobile","laptop"]

我想对每个对象的类别应用过滤器。

所以过滤器将返回具有来自 filterKeyArray 的键的对象。

建议一些帮助。

【问题讨论】:

  • 为什么mydevices 是一个对象而不是一个数组? var mydevices = [{name: "name1", category: "laptop"}, {name: "name2", category: "laptop"}, ...]; var filteredElements = mydevices.filter(d => filterKeyArray.indexOf(d.category) > -1);

标签: javascript arrays json node.js lodash


【解决方案1】:

使用Object.keys()Array#map 遍历mydevices 属性并检查指定元素是否具有filterKeyArray 数组中提到的category 值。

ES6 解决方案,不需要lodash

var mydevices = {Object1:{name:"name1",category:"laptop"},Object2:{name:"name2",category:"laptop"},Object3:{name:"name3",category:"Desktop"},Object4:{name:"name4",category:"Mobile"}},
    filterKeyArray = ["Mobile", "laptop"]

Object.keys(mydevices).forEach(v => filterKeyArray.some(c => c == mydevices[v].category) ? null : delete mydevices[v]);

console.log(mydevices);

【讨论】:

  • 1.你知道Array.prototype.map() 是干什么用的吗? 2. 为什么要销毁mydevices? 3.你没有仔细阅读要求
  • @Kinduser 它正在返回没有类别的对象
  • @Andreas 说真的,伙计,你在夸大其词......关于map 很好,我应该使用forEach,但最后两点......它根本没有生产力,它只是破坏性的.
  • @Sam 哦,对不起。我误解了你的问题。现在可以了。
  • @Andreas 很好,但最好muuuch告诉我哪里出了问题以及如何处理它,而不是指责我并对我大喊大叫'diid you重读问题??!!你仔细读了吗??!!'...这让我很难过...
【解决方案2】:

使用 lodash,您可以使用 pickBy 从对象中选择属性并传递使用 includes 的函数来过滤掉不在数组中的值。这将创建新对象并且不会更改原始对象。

var mydevices = {"Object1":{"name":"name1","category":"laptop"},"Object2":{"name":"name2","category":"laptop"},"Object3":{"name":"name3","category":"Desktop"},"Object4":{"name":"name4","category":"Mobile"}}
var filterKeyArray=["Mobile","laptop"]

var result = _.pickBy(mydevices, e => _.includes(filterKeyArray, e.category))
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多