Javascript 检查键是否有值
我正在尝试检查Javascript 检查键是否有值,javascript,jquery,arrays,object,key,Javascript,Jquery,Arrays,Object,Key,我正在尝试检查日历和t点键是否有与之关联的值 起初,我试图检查是否包含calendar和tpoint键,但后来我意识到它们始终都是键。我想检查日历和tpoint键是否有值的原因是,有时它们没有值 我的尝试在下面的packageContents对象下面 有人知道我如何检查键是否有值吗 var packageContents = { 'packages': [ { 'price': '32', '
日历
和t点
键是否有与之关联的值
起初,我试图检查是否包含calendar
和tpoint
键,但后来我意识到它们始终都是键。我想检查日历
和tpoint
键是否有值的原因是,有时它们没有值
我的尝试在下面的packageContents
对象下面
有人知道我如何检查键是否有值吗
var packageContents = {
'packages': [
{
'price': '32',
'name': 'Gold Bundle Package',
'calendar': {
'type': '2year',
'color': 'Brushed Nickel',
},
'tpoint': {
'type': 'Gold',
'touches': '21',
'years': '7',
}
},
{
'price': '23',
'name': 'Bronze Bundle Package',
'calendar': {
'type': '2year',
'color': 'Brushed Nickel',
},
'tpoint': {
'type': 'Bronze',
'touches': '9',
'years': '7',
}
}
]
};
packageContents['packages'].forEach(function (bun) {
if (bun['calendar'].length >= 1 && bun['tpoint'].length >= 1) {
var bundleSet;
console.log(bundleSet);
console.log('Working');
}
});
编辑:
您的.forEach()
循环正在packageContent.packages
数组中的对象上循环,因此最好使用变量名来提醒您
然后,由于您知道这些对象中键的静态名称,因此不需要使用括号符号([]
)将它们作为字符串传递给对象,只需在实例上使用点符号即可
最后,您只需要检查这些键中是否存储了值,因此检查存储在其中的数据类型是否为未定义的
var packageContents={
“包”:[
{
‘价格’:‘32’,
'name':'Gold Bundle Package',
“日历”:{
“类型”:“2年”,
“颜色”:“拉丝镍”,
},
“tpoint”:{
“类型”:“黄金”,
"接触":"21",,
‘年’:‘7’,
}
},
{
‘价格’:‘23’,
'name':'brown Bundle Package',
“日历”:{
“类型”:“2年”,
“颜色”:“拉丝镍”,
},
“tpoint”:{
“类型”:“,
“触摸”:“,
“年”:“,
}
}
]
};
var bundleSet=null;
packageContents.packages.forEach(函数(obj){
//我们现在正在主数组中的每个顶级对象上循环。
//要查看这些对象的quesiton中的每个属性是否都有值,
//我们需要对这些属性进行循环
用于(obj中的var prop){
//我们只对“日历”和“点”感兴趣
如果(道具==“日历”| |道具==“t点”){
//这些属性存储它们自己的对象,我们需要检查这些属性
对于(obj[prop]中的var子程序){
//因为您知道密钥名称,所以可以直接在实例上访问它们
//只需检查它们是否有未定义的值即可
如果(对象[属性][子属性]!=“”){
bundleSet=true;
}否则{
bundleSet=false;
}
}
}
}
console.log(bundleSet);
});代码>谢谢!那么typeof只是返回未定义或已定义的吗?@Paultypeof
将返回JavaScript类型(“object”
,“string”
,“number”
,“boolean”
,“function”
,等等),或者当没有值时它将返回“undefined”
。那么为什么它会显示未定义呢?所有键都有值?只是有些困惑。@Paul,因为在您的代码中,您声明了var bundleSet
,但您从未将其初始化为任何内容,然后立即将其记录下来。这一部分与实际问题或解决方案无关,只是额外的代码,我以为你有什么目的。@Paul我完全误解了你的意思,我更新了我的答案以反映你的问题。在您的情况下,如果您希望属性有时可能包含空字符串(即,“年”:“
),那么只需要对空字符串进行简单的测试。
var packageContents = {
'packages': [
{
'price': '23',
'name': 'Bronze Bundle Package',
'calendar': {
'type': '2year',
'color': 'Brushed Nickel',
},
'tpoint': {
'type': '',
'touches': '',
'years': '',
}
}
]
};
var bundleSet = '';
packageContents['packages'].forEach(function (obj) {
if (typeof obj.calendar !== 'undefined' && typeof obj.tpoint !== 'undefined') {
bundleSet = "Bundle";
}
else {
bundleSet = "not bundle"
}
console.log(bundleSet);
});