【问题标题】:Getting a particular key from an object array [closed]从对象数组中获取特定键[关闭]
【发布时间】:2018-02-14 22:40:09
【问题描述】:

我有一个带有键 a、b、c 的对象数组。 a 具有属性 property1,b 具有属性 property1 和 property2,c 具有属性 propertycheck。我的要求是我只想获得其中没有 property1 的密钥。在这种情况下,我希望输出为 c。任何帮助表示赞赏。卡在这一点上

  [
      {
        "a": {
          "property1": "false"
        }
      },
      {
        "b": {
          "property1": "false",
          "property2": "truthy"
        }
      },
      {
        "c": {
          "propertycheck": "required"
        }
      }
 ]

【问题讨论】:

  • 我们不鼓励发表断章取义的帖子,并希望社区能够解决它。假设您尝试自己解决并陷入困境,如果您写下您的想法和您无法弄清楚的内容,这可能会有所帮助。它肯定会为您的帖子带来更多答案。在此之前,该问题将被投票关闭/否决。

标签: javascript arrays json typescript object


【解决方案1】:

这是一个版本,您可以为 3 个对象中的每一个对象设置多个子键。

var arr = [
  {
    "a": {
      "property1": "false"
    }
  },
  {
    "b": {
      "property1": "false",
      "property2": "truthy"
    }
  },
  {
    "c": {
      "propertycheck": "required"
    }
  }
]

var arr = arr.filter(function(elem){   //Filter on each object in the array
  var checkKey = true;                 //checkKey will be the return value of filter
  Object.keys(elem).forEach(function(key){  //For each key of elem
    if("property1" in elem[key]){           //If value of key (object) own "property1"
      checkKey = false                      //You want to remove the object from table so return false to filter
    }
  })
  return checkKey
})

-

参考Array.filterhttps://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/filter

【讨论】:

  • 使用hasOwnProperty 来检查一次过滤器循环中是否存在密钥可以避免内部forEach 循环的复杂性。
【解决方案2】:

这个可以做到:

d = [
      {
        "a": {
          "property1": "false"
        }
      },
      {
        "b": {
          "property1": "false",
          "property2": "truthy"
        }
      },
      {
        "c": {
          "propertycheck": "required"
        }
      }
]

d.filter(function(x){
   if(!x[Object.keys(x)[0]].hasOwnProperty("property1"))
    {return x}
})

说明:

  1. d.filter 将在应用过滤函数时遍历对象数组
  2. x[Object.keys(x)[0]] 这用于动态获取密钥 a、b 或 c。
  3. .hasOwnProperty("property1") 将检查键 property1 是否在对象中。

【讨论】:

    【解决方案3】:

    使用 hasOwnProperty 来识别具有属性的对象 .. 就像这段代码将返回您的对象'c'

    myObjArr.filter(o => ! o.hasOwnProperty( myPropAsString)) 
    

    【讨论】:

    • 这个答案可能需要更多解释
    • 我的答案在接受的答案之前,并且是同一解决方案的更有效版本。我可以理解,它可能值得写出来,而不仅仅是一个快速的解决方案。我无法理解所有反对意见的反对意见,因为到目前为止发布的问题的最佳解决方案仍然存在。
    • 我没有投反对票 - 只是提出建议以尝试使其成为积极因素
    猜你喜欢
    • 2017-09-01
    • 2022-08-15
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    相关资源
    最近更新 更多