JavaScript对象迭代
JavaScript Object Iteration
由于我正在进行AJAX调用,我在访问从服务器端脚本接收到的JSON对象中的某些属性时遇到了问题。我的JSON数据可以有两种形式,这取决于对象本身的数据。
形式1:
"MY_OBJ" : { "FILE" : "myfile.txt",
"PARAMS" : { "PARAM" : { "KEY" : "mykey",
"VALUE" : "myvalue"
} }
}
形式2:
"MY_OBJ" : { "FILE" : "myfile.txt",
"PARAMS" : { "PARAM" : [ { "KEY" : "mykeyone",
"VALUE" : "myvalueone"
},
{ "KEY" : "mykeytwo",
"VALUE" : "myvaluetwo"
}
] }
}
这是我目前如何试图解析数据显示在浏览器中:
function(v) {
var myFormattedData = v.FILE;
if (v.PARAMS !== undefined && v.PARAMS.PARAM !== undefined && v.PARAMS.PARAM.KEY !== undefined && v.PARAMS.PARAM.VALUE !== undefined) {
myFormattedData += '<br />' + v.PARAMS.PARAM.KEY + ' : ' + v.PARAMS.PARAM.VALUE;
} }
这个方法工作很好,当我的数据是在表单1。在这种情况下,我将在浏览器中得到如下输出:
myfile.txt
mykey : myvalue
…这正是我想要的。
然而,当数据在表单2中,我得到的是浏览器中显示的文件名,像这样…
myfile.txt
…但是我想要的是…
myfile.txt
mykeyone : myvalueone
mykeytwo : myvaluetwo
我需要能够处理以两种形式获取数据。更糟糕的是,我可能还应该计划在将来某个时候接收不止一个或两个键值对的可能性。我已经为此挣扎了很长时间。任何帮助都非常感激!
谢谢!
为简化处理,请检查PARAM
对象的类型。如果它是一个数组,那么你有一个类型2的响应。否则它就是类型1的响应。通过将PARAM
包装在数组中,将类型1转换为类型2进一步简化,因此无论服务器如何发送,您都可以将客户端上的所有内容视为数组。
function(data) {
var params = data.PARAMS.PARAM;
if (!(params instanceof Array)) {
// convert to Array to treat everything alike
params = [ params ];
}
// now that we know we are always dealing with an array,
// loop through each item and print each key, value pair
params.forEach(function(param) {
console.log(param.KEY + ": " + param.VALUE);
});
}
尝试对第二个表单执行如下操作:
for(i=0;i<v.PARAMS.PARAM.length;i++) {
myFormattedData += '<br />' + v.PARAMS.PARAM[i].KEY + ' : ' + v.PARAMS.PARAM[i].VALUE;
}
在form1中,v.PARAMS.PARAM.KEY
将是非空的
在表格2中,它将为空。
在本例中,您需要将键和值引用为v.PARAMS.PARAM[0].KEY
和v.PARAMS.PARAM[0].VALUE
,以及v.PARAMS.PARAM[1].KEY
在第二个版本中,v.PARAMS.PARAM
是一个数组。你应该检查它是不是一个数组,然后迭代那个数组。下面的代码只适用于表单2。如果这两种表单都有可能从服务器返回,那么您需要将您的函数与我所展示的混合在一起。
function( v )
{
var myFormattedData = v.FILE;
if( v.PARAMS !== undefined && v.PARAMS.PARAM !== undefined && v.PARAMS.PARAM instanceof Array )
{
var l = v.PARAMS.PARAM.length,
current;
for( var i = 0; i < l; i++ )
{
current = v.PARAMS.PARAM[i];
if( current.KEY !== undefined && current.VALUE !== undefined )
{
myFormattedData += '<br />' + current.KEY + ' : ' + current.VALUE;
}
}
}
}
相关文章:
- 如何在DataTables 2.1中迭代对象数组
- 基于使用angular在下拉列表中选择的对象,迭代对象内部的对象
- 为什么数组在对象内部迭代对象时存储重复值
- 为什么我不能用for Each迭代对象
- 为什么字符串在 ES2015 中是可迭代对象
- 如何通过迭代对象数组来删除某些项目
- 在不同数据选项之间循环迭代对象
- 延迟迭代对象
- 在 es6 中迭代对象并返回新对象
- Javascript:如何迭代对象[Key:value],但跳过一些键([最快的方法])
- 如何使用Meteor.js中的Template辅助对象迭代对象中的两个数组
- JavaScript如何在内部迭代对象键
- 如何迭代对象/数组中的项,并构建嵌套的JSON
- 创建一个生成器来迭代对象属性排列
- 使用map迭代对象数组
- 使用 for 循环,如何迭代对象以向其添加 id 属性
- 用于迭代对象的 for 循环
- 在角度ng重复中迭代对象的数组
- 如何在 Javascript 中迭代对象数组
- 迭代对象内部的对象