客户有一个要求,即内容文本应以每个单独内容的新序列号开头。对于内容 JSON,请考虑以下示例 JSON。我将在前端获取此 JSON 作为后端的响应。我正在递归地迭代该 JSON,所以现在我想在迭代它的同时创建它的序列号。有什么简单的方法可以做到这一点?
var myobj = {
"name": "sample", //1
"def": [ //2
{
"setId": 1, //2.1.1
"setDef": [ //2.1.2
{
"type": "STRING", //2.1.2.1.1
"name": "ABC" //2.1.2.1.2
},
{
"type": "STRING", //2.1.2.2.1
"name": "XYZ" //2.1.2.1.2
}
]
},
{
"setId": 2, //2.2.1
"setDef": [ //2.2.2
{
"type": "STRING", //2.2.2.1.1
"name": "abc" //2.2.2.1.2
},
{
"type": "STRING", //2.2.2.2.1
"name": "xyz" //2.2.2.1.1
}
]
}
],
"property": { //3
{
"color": "red" //3.1.1
},
{
"run": true //3.2.1
},
{
"width": [120, 330, 332] //3.3.1
}
},
listing: true //4
};
这是我的代码:
function displayContent(obj) {
jQuery.each(obj, function(key, val) {
recursiveIterObj(key, val, obj);
});
}
function recursiveIterObj(key, val, obj) {
if(!isplain(val)){
setContentData(key, curr_seq, last_seq, "");
$.each(val, function(k,v){
recursiveIterObj(k, v, val);
});
}else{
setContentData(key, curr_seq, last_seq, val);
}
}
function isplain(data) {
return (typeof data === 'string' || typeof data === 'number')?
true:false;
}
function setContentData(key, curr_seq, last_seq, val){
$(".heading").text(key);
$(".sequence").txt(curr_seq); // if this is 2.1.2 or 4
$(".sequence_last").txt(last_seq); // then, this should be 2.1.1 or 3
$(".txt_content").text(val);
}
$(function(){
displayContent(obj);
})
注意 - 上面的 JSON 是来自互联网的随机 json。
最佳答案
JavaScript 中不保证对象中的属性顺序。只有在数组的情况下,您才会在 JavaScript 中迭代时看到顺序。
自 ECMAScript 2015 起,使用 Map
对象可能是一种替代方案。 Map 与 Object 有一些相似之处并保证键的顺序。
关于javascript - 从 json 生成序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33257564/