我看到了有关查找 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;
}
...
我从来没有捕捉到那个 if 语句,即使我知道长度是 1。那个长度的类型也是 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;
};
基本上我要问的是:
在执行 Object.keys(data)
时,我如何返回除 undefined
变量之外的任何内容?它可以是字符串、整数,等等。只要我能在 if 语句中检查是否相等。
编辑
console.log(Object.keys(JSON.parse(data)).length);
输出相同的东西。 1 或 2,但没有给我类型
最佳答案
如果对象中没有 'checkboxes-lower'
属性,则 JSON.parse(data)['checkboxes-lower']
是 undefined
和 (JSON.parse(data)['checkboxes-lower']).indexOf
正在尝试执行 (undefined).indexOf
这将给出一个错误在它可以评估 Object.keys()
返回的数组的 .length
之前停止执行您的代码。
首先测试长度,并在尝试使用它之前测试该属性是否存在。此外,到处调用 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()
返回的字符串表示,我已经放入一个名为 json
的新变量。
关于javascript - 获取具有定义类型的 JSON 对象长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20202131/