检查 JavaScript 对象中是否存在指定的键

3

我有一个对象,如果键不存在,则使用JavaScript将其设置为null。

如果在对象obj中不存在键,例如ccy不存在于cnMYCA中,如何使用JavaScript分配并将其设置为null。

var obj=[{
  "cn": "TH",
  "lang": "thai",
  "bank": "yes",
  "ccy": "THB"
},{
   "cn": "MY",
   "lang": "malay",
},{
   "cn": "CA",
   "lang": "english",
   "bank": "yes"
}]

render(){
  obj.map(e=>
  return html`
    <h1>${e.cn}</h1>
    <h5>${e.lang}</h5>
    <h6>${e.ccy}</h6>
`
 )
}

1
你能添加预期输出吗? - Learner
${e.ccy === undefined ? null : e.ccy} - Jaromanda X
@JaromandaX 谢谢回复,在我的 obj 中,由于是动态的,如何检查键名本身是否存在? - Senthil
更改了注释,所以可能更清晰了?尽管下面的答案更正确。 - Jaromanda X
<h6>${e.ccy || null}</h6>不就可以了吗? - spender
显示剩余2条评论
6个回答

4
只要您可以确保e.ccy不会是假值(falseundefinednull0""NaN),最简单的方法就是使用逻辑或运算符||
${e.ccy || null}

我知道@Ele - 请看我的回答的第一行。 - Jack Bashford

3

如果您不想将默认回退值写入模板并希望保持模板的清洁,您也可以在渲染之前预处理数据并设置缺失值:

var obj = [{
  "cn": "TH",
  "lang": "thai",
  "bank": "yes",
  "ccy": "THB"
}, {
  "cn": "MY",
  "lang": "malay",
}, {
  "lang": "english",
  "bank": "yes"
}]

obj = obj.map(({
  cn = null,
  ccy = null,
  ...rest
}) => Object.assign(rest, { cn, ccy }))

console.log(obj)


2
您可以使用运算符in来检查键是否存在,操作如下: {"ccy" in e ? e.ccy : null} 使用运算符in是避免在虚假值上错误检查的最安全方法。

2
${'ccy' in e ? e.ccy : null}以适应OP添加的代码 - Jaromanda X
你不一定需要将它分配给 e - Jaromanda X

0

检查对象中是否存在给定的键有多种方法。

if(!obj[0].hasOwnProperty('cn')) {
    obj[o].cn = null
}

或者

if(typeof obj[0].cn === 'undefined') {
    obj[0].cn = null;
}

或者

if(obj[0].cn === undefined) {
    obj[0].cn = null;
}

在这种情况下,后两者非常相似,typeof通常用于检查变量是否在代码中被定义和可访问。

现在,具体例子如下:

var missing = ['cn', 'ccy'];
for(var i = 0; i < obj.length; i++) {
    for(var j = 0; j < missing.length; j++) {
        if(!obj[i].hasOwnProperty(missing[j])) {
            obj[i][missing[j]] = null;
        }
    }
}

0
var q = [...Object.keys(obj[0]),...Object.keys(obj[1]),...Object.keys(obj[2])]
for(let i=0;i<obj.length;i++){
 for(let k=0;k<q.length;k++){
   if(!(q[k] in obj[i])){
    obj[i][q[k]] = null
  }
 }
}
console.log(obj)

请添加一条注释,解释您的代码如何修复问题,以改进此答案。 - Eric Hauenstein
它可以用于包含变量键的对象数组中的任何对象,不一定在第一个索引中,并且您也不需要给出键的名称。 - aaditya
感谢您提供这段代码片段,它可能会提供一些有限的、即时的帮助。一个适当的解释将极大地提高其长期价值,因为它展示了为什么这是一个好的问题解决方案,并使其对未来读者的其他类似问题更有用。请[编辑]您的答案,添加一些解释,包括您所做的假设。 - CertainPerformance

0

在 JavaScript 对象中未定义的任何键都将被视为未定义,因此您可以检查

(typeof obj.ccy === "undefined") ? null : obj.ccy;
(obj.ccy == undefined) ? null : obj.ccy;

如果您不熟悉三元表达式,您也可以将上述代码编写为以下形式。

if(obj.ccy == undefined){
   obj.ccy = null;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接