我有一个算法将一个对象从MVC(C#)绑定到视图。密钥和数据可以是任何东西,这取决于实施者。
我遇到的问题是我无法确定JSON字符串中的某些内容是数组还是简单字符串。以下代码递归地工作。如果是阵列,则需要深入挖掘。否则,它将根据键和值绑定它找到的值。
function constructView(data)
{
for(var key in data)
{
if (data[key].length > 1)
{
var count = 0;
while (count < data.length)
{
constructView(data[count]);
count++;
}
}
$("#" + key).html(data[key]);
}
}
这只是一个原型,所以目前它不会生成组件,只是简单地进行绑定。
好的,问题是:
当我通过时
{"data":"this is a response","strings":["test1","test2"]}
它返回18和2的长度。这是因为两者在技术上都是有效长度的数组。
有没有办法获得物品长度?它将单个字符串视为1个项目,将数组视为其各自的项目计数?
我可以验证JSON数组是否正确传入。
非常感谢任何帮助!
答案 0 :(得分:4)
Array.isArray(x)
会检查数组,但如果您需要支持旧版浏览器,则需要使用polyfill(非常容易找到)。
typeof x === "string"
将表示一个字符串
答案 1 :(得分:1)
在现代的ES5兼容实现中,有Array.isArray
:
var a = [];
Array.isArray(a); // true
在较旧的实现中,您需要这个丑陋的解决方法:
function isArray(a) {
return ({}).toString.call(a) === "[object Array]";
// or:
// return Object.prototype.toString.call(a) === "[object Array]";
}
答案 2 :(得分:0)
请参阅其他答案,但如果您不想担心polyfill,您似乎已经在使用jQuery(继续使用$(...).html(...)
),那么为什么不使用jQuery's $.isArray()
function?< / p>
答案 3 :(得分:0)
由于您使用的是JQuery,因此可以使用:
if ($.type(data[key])==="array")