Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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 获取值为null的键的名称_Javascript_Jquery_Arrays_Key - Fatal编程技术网

Javascript 获取值为null的键的名称

Javascript 获取值为null的键的名称,javascript,jquery,arrays,key,Javascript,Jquery,Arrays,Key,我正在数组中运行一个循环,检查calendar和tpoint是否有值。在我的if语句的else语句中,我试图用var notSelected=(obj.prop.subop).val()获取键的名称 我知道我已经放弃了我的方法。。我只是不知道如何获得密钥名 因此,在我的示例中,由于tpoint中的值为空,我希望var notSelected等于tpoint 有人知道我怎么做吗 var packageContents = { 'packages': [ {

我正在数组中运行一个循环,检查
calendar
tpoint
是否有值。在我的
if语句的
else
语句中,我试图用
var notSelected=(obj.prop.subop).val()获取
键的名称

我知道我已经放弃了我的方法。。我只是不知道如何获得密钥名

因此,在我的示例中,由于
tpoint
中的值为空,我希望
var notSelected
等于
tpoint

有人知道我怎么做吗

var packageContents = {
    'packages': [
        {
            'price': '23',
            'name': 'Bronze Bundle Package',
            'calendar': {
                'type': '2year',
                'color': 'Brushed Nickel',
            },
            'tpoint': {
                'type': '',
                'touches': '',
                'years': '',
            }
        }
    ]
};

var bundleSet = null;

var bundleSet = null;
packageContents.packages.forEach(function (obj) {
    for (var prop in obj) {
        if (prop === 'calendar' || prop === 'tpoint') {
            for (var subProp in obj[prop]) {
                if (obj[prop][subProp] !== '') {
                    bundleSet = true;
                } else {
                    bundleSet = false;
                    var notSelected = (obj.prop.subProp).val() !== '';
                    console.log(notSelected);
                }
            }
        }

    }
    console.log(bundleSet);
});

像这样的东西怎么样:

function hasEmptyProps(prop) {
  return Object.values(prop).some(x => x === '');
}

const result = packageContents.packages.map(x => {
  if (hasEmptyProps(x.calendar)) {
    return 'calendar';
  } else if (hasEmptyProps(x.tpoint)) {
    return 'tpoint'
  } else {
    return '';
  }
})

console.log(result)

将返回
[“tpoint”]
(或“calendar”、“”或“tpoint”数组)

引用
对象属性subop的行是错误的;它应该是
obj[prop][subop]
,如
if
语句所示。调用
.val()
也没有意义;您所需要的就是
obj[prop][subop]
,它将解析为“tpoint”对象的“type”、“touch”或“years”属性的值。@Pointy我尝试过做一些类似的事情<代码>变量notSelected=(对象[prop][subop]).val()!=''
您应该看到关于
.val()
引用的错误。@Pointy Right,我得到
.val
不是函数。我只是不确定如何构造它。只要去掉
.val()
,因为它没有任何意义
obj[prop][subop]
是解析为子属性值的表达式。你的代码已经在使用它了!不管怎样,在确定子属性值为
''
之后,确实不清楚为什么还要费心再次检查它。