【问题标题】:Accesing object value in array of objects by conditioning another object property通过调节另一个对象属性来访问对象数组中的对象值
【发布时间】:2021-01-11 00:04:12
【问题描述】:

这可行,但问题是我可以一次将naziv.value 保存在var naziv 中,在这个find method 中,这样我就不必声明另一个变量了吗?

var naziv = obj.find(c => c.name === "naziv");
console.log(naziv.value)

当前输出应该是test by console.log(naziv.value),我想只是console.log(naziv)

var obj = [{
    name: "naziv",
    value: "test"
  },
  {
    name: "zzz",
    value: "xxx"
  }
]

var naziv = obj.find(c => c.name === "naziv");
console.log(naziv.value)

编辑: 如果名称相同,还可以创建一个数组或值,例如:

var obj = [{
    name: "naziv",
    value: "test"
  },
  {
    name: "zzz",
    value: "xxx"
  },
  {
    name: "Telefon[]",
    value: "tel1"
  }, {
    name: "Telefon[]",
    value: "tel2"
  }
]

var naziv = obj.find(c => c.name === "Telefon[]");
console.log(naziv.value)

应该是:[tel1,tel2]

【问题讨论】:

  • 您指望name 是独一无二的。有没有可能它不会/测试它不是?
  • var naziv=obj.find(c => c.name === "naziv").value;
  • 我也喜欢@Abdullah Razzaki 的解构解决方案。
  • 如果你想在同一迭代中进行过滤和映射,只需使用 for 循环:const output = []; for(let o of obj) if(o.name === "naziv") output.push(o.value)
  • var values=obj.filter(item=>item.name=="Telefon[]").map(item=>item.value)

标签: javascript arrays object properties


【解决方案1】:

var obj = [{
    name: "naziv",
    value: "test"
  },
  {
    name: "zzz",
    value: "xxx"
  },
  {
    name: "naziv",
    value: "xxx"
  }
]

var naziv = obj.filter(item => item.name === 'naziv').map(item => item.value)
console.log(naziv)

【讨论】:

    【解决方案2】:

    如果您希望多个值作为一个数组,这可以是其中一种方式

    var obj = [{name:"naziv",value:"test"},{name:"zzz",value:"xxx"},{name:"Telefon[]",value:"tel1"},{name:"Telefon[]",value:"tel2"}]
    
    var naziv = obj.filter(c => c.name === "Telefon[]").map(res => res.value);
    console.log(naziv)

    同样,如果值本身就是预期的输出,并且如果只期望单个值,那么下面是其中一种方法。这里,我用过Optional Chaining

    var obj = [{name:"naziv",value:"test"},{name:"zzz",value:"xxx"},{name:"Telefon[]",value:"tel1"}]
    
    var naziv = obj.find(c => c.name === "Telefon[]")?.value;
    console.log(naziv)

    如果您需要此代码来运行某些旧版本的浏览器并且不支持Optional Chaining,则可能有机会使用下面的另一种方式

    var obj = [{name: "naziv",value: "test"},{name: "zzz",value: "xxx"},{name: "Telefon[]",value: "tel1"}]
    
    var naziv = (obj.find(c => c.name === "Telefon[]") || {}).value;
    console.log(naziv)
    
    var notFound = (obj.find(c => c.name === "not_found") || {}).value;
    console.log(notFound);

    【讨论】:

    • filter 之后不需要?.,因为它永远不会返回 null 或 undefined。如果没有找到匹配项,它将是一个空数组
    • 是的@adiga。我已经更新了我的答案。谢谢你指点。 :)
    【解决方案3】:

    你可以使用像const {value:naziv} = obj.find(c => c.name === "naziv");这样的解构方法

    【讨论】:

    • 这很棒,从未见过,任何帮助:如果名称不唯一,则创建一个数组,我编辑了一个问题
    • 你可以使用obj.filter(c=>c.name==='naziv').map(c=>c.value),但这永远是一个数组
    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 2013-12-02
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    相关资源
    最近更新 更多