我已经看到了有关查找JSON对象长度的问题和答案,目的只是为了知道。但是,我需要稍后使用IF语句检查它,并且我得到undefined
类型的长度。
当我这样做时:
$(function() {
$('#filter_search').click(function() {
var data = JSON.stringify($('#filterform').serializeObject());
var fetch = true;
if ((JSON.parse(data)['checkboxes-lower'].indexOf("foo") == -1 && JSON.parse(data)['checkboxes-lower'].indexOf("bar") == -1) || (Object.keys(JSON.parse(data)).length == 1)) {
alert("Please input at least one option");
fetch = false;
}
...
即使我知道长度为1,我也从未听过if语句。该长度的类型也是undefined
。如何获得一个有意义的(意味着我可以在这个if语句中使用)返回JSON对象的长度?
我的JSON对象总是长度为1或长度为2.它将如下所示:
{"checkboxes":"foo","checkboxes-lower":["bar", "tar"]}
或者看起来像这样:
{"checkboxes":["foo", "bar"]}
以上是我运行时输出的内容:
alert(JSON.stringify($('#filterform').serializeObject()));
其中serializeObject是:
$.fn.serializeObject = function() {
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
基本上我要问的是:
在执行undefined
时如何返回Object.keys(data)
变量之外的任何内容?它可以是字符串,int,等等。只要我能在if语句中检查是否相等。
修改
console.log(Object.keys(JSON.parse(data)).length);
输出相同的东西。 1或2,但不给我一个类型
答案 0 :(得分:2)
如果您的对象中没有'checkboxes-lower'
属性,那么JSON.parse(data)['checkboxes-lower']
为undefined
而(JSON.parse(data)['checkboxes-lower']).indexOf
正在尝试执行(undefined).indexOf
,这将导致错误停止在此之前执行代码,然后才能评估.length
返回的数组的Object.keys()
。
首先测试长度,然后在尝试使用它之前测试该属性是否存在。此外,在任何地方继续致电JSON.parse()
都非常麻烦。为什么不保留对象的引用:
var data = $('#filterform').serializeObject(),
json = JSON.stringify(data),
fetch = true;
if (Object.keys(data).length == 1 ||
!data['checkboxes-lower'] || // test that property exists before using
data['checkboxes-lower'].indexOf("foo") == -1 && // .indexOf on it
data['checkboxes-lower'].indexOf("bar") == -1) {
alert("Please input at least one option");
fetch = false;
}
(另外我认为您不需要使用.indexOf()
分别测试"foo"
和"bar"
,因为根据您的描述,它听起来像是'checkboxes-lower'
属性存在于它将永远是一个至少有这两个选项之一的数组。所以!data['checkboxes-lower']
测试可能就足够了吗?)
顺便说一句,there's no such thing as a JSON object。您在我显示的代码中有一个对象(data
),或者您有JSON,它是JSON.stringify()
返回的字符串表示形式,我将其放入一个名为{{1}的新变量中}。