Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查对象javascript中是否存在密钥_Javascript_Html_Arrays_Object_Ecmascript 6 - Fatal编程技术网

检查对象javascript中是否存在密钥

检查对象javascript中是否存在密钥,javascript,html,arrays,object,ecmascript-6,Javascript,Html,Arrays,Object,Ecmascript 6,我使用javascript将if键不存在的对象设置为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`

我使用javascript将if键不存在的对象设置为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>
`
 )
}
如果该键不存在于对象
obj
中,如
ccy
不存在
cn
MY
CA
,如何使用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>
`
 )
}
var obj=[{
“cn”:“TH”,
“朗”:“泰语”,
“银行”:“是”,
“ccy”:“泰铢”
},{
“cn”:“我的”,
“朗”:“马来语”,
},{
“cn”:“CA”,
“郎”:“英语”,
“银行”:“是”
}]
render(){
对象映射(e=>
返回html`
${e.cn}
${e.lang}
${e.ccy}
`
)
}

您可以使用中的操作员检查钥匙是否存在,如下所示:

中的操作员
是避免错误检查falsy值的最安全的方法


{e.ccy中的“ccy:null}
只要你能确保
e.ccy
不会出错(
false
undefined
null
0
”或
NaN
)最简单的方法就是使用逻辑or运算符

${e.ccy || null}

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

(typeof obj.ccy === "undefined") ? null : obj.ccy;
(obj.ccy == undefined) ? null : obj.ccy;
如果你不熟悉三元表达式。你也可以这样写上面的内容

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

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

if(!obj[0].hasOwnProperty('cn')) {
    obj[o].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;
        }
    }
}
var缺失=['cn','ccy'];
对于(变量i=0;i
如果不想将默认回退值写入模板并保持模板干净,还可以在呈现之前预处理数据并设置缺少的值:

var obj=[{
“cn”:“TH”,
“朗”:“泰语”,
“银行”:“是”,
“ccy”:“泰铢”
}, {
“cn”:“我的”,
“朗”:“马来语”,
}, {
“郎”:“英语”,
“银行”:“是”
}]
obj=obj.map(({
cn=null,
ccy=null,
休息
})=>Object.assign(rest,{cn,ccy}))
console.log(obj)
var q=[…Object.keys(obj[0]),…Object.keys(obj[1]),…Object.keys(obj[2])]

对于(让i=0;我可以添加预期的输出
${e.ccy===undefined?null:e.ccy}
@JaromandaX感谢您的回复,在我的
obj
中,因为动态如何检查密钥名称本身改变了注释,所以可能更清楚?尽管下面的答案更正确,但不会
${e.ccy | null}
做这个把戏吗?或者
${'ccy'在e?e.ccy:null}
为了适应代码OP已经添加了您不需要的代码需要将其分配给
e
thoughI know@Ele-请参阅我答案的第一行。请添加注释,解释您的代码如何解决问题以改进此答案。它可以用于包含任何对象中变量键的对象数组中,不必在第一个索引中,您也不必给出键的名称。谢谢您的帮助代码片段,它可能会提供一些有限的、即时的帮助。通过说明为什么这是一个很好的问题解决方案,A将极大地提高其长期价值,并使其对未来读者提出其他类似问题更有用。请在您的回答中添加一些解释,包括您所做的假设。
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;
        }
    }
}
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)