感谢前两个问题的答案。我有一个新的,这个是jQuery中的可折叠面板。概念是,JSON对象的第一个键将显示为按钮,其他键将被视为常规文本,如<p>
等。
我有这个函数来测试对象的第一个索引。
function isFirstIndex(obj){
var key;
for(key in obj){
if(obj[key]===0){
return true;
}
}
return false;
}
我试过这个:
function generateTree(data, selId){
var cnt = "";
for (var i=0; i<5; i++){
var row = data[i];
$.each(row, function(key,value){
if (isFirstIndex(row)){
cnt += "<button>" + value + "</button><br/>";
} else{
cnt += "<strong>" + key + "</strong> :" + value + "<br/>";
}
});
cnt += "<br/>";
}
$(selId).html(cnt);
}
但最终在调试中发现key
函数中的isFirstIndex
与字符串进行比较。
假设我有一个JSON:
{"userId" : 1, "name" : "cool name"}
我想将任何JSON集的第一个键显示为按钮,以下属性将是普通文本。请允许我发布pseudo-code
之类的流程。
Loop through all elements of data response
Loop through each key and value of each data element.
If the key is the first occurrence within the data set
display it as a button.
else
display it as ordinary text.
End Inner Loop
End outer loop
答案 0 :(得分:1)
UtsavShah的含义是for (key in obj)
可以按任何顺序在keys
中迭代obj
,JS规则不会强制执行任何订单。
事实上,JS规范不仅强制执行迭代任何命令,而且也强制执行内部存储:每个JS引擎实现(因此取决于浏览器)可以按任何顺序存储您的JSON密钥,因此,即使您首先编写"userId"
,,但这并不意味着浏览器会将其保留为第一个密钥。为此,您必须使用数组,或使用具有特定键的约定。
编写代码的方式,它将在对象(行)中查找名为“0”的键。 BTW i
函数中的isFirstIndex
迭代器无用。
您可能尝试实现的是测试分配给"userId"
键的值是否等于0?在这种情况下,您只需测试if (obj["userId"] === 0)
。
编辑:(在您解释userId
是一个按钮之后)
如果您只想将键"userId"
中的值显示为按钮,则只需执行以下操作:
function generateTree(data, selId){
var cnt = "";
for (var i=0; i<5; i++){
var row = data[i];
$.each(row, function (key,value) { // Note that $.each does not necessarily iterates in any specific order either.
if (key === "userId"){
cnt += "<button>" + value + "</button><br/>";
} else{
cnt += "<strong>" + key + "</strong> :" + value + "<br/>";
}
});
cnt += "<br/>";
}
$(selId).html(cnt);
}
<强> EDIT2:强>
如果您需要订单,则需要一个数组。如果你想要有序的密钥,你可以像这样塑造你的数据(当然这必须在服务器和客户端都实现):
[
{"userId": 1},
{"name": "cool name"}
]
如果您只需要知道哪个特定密钥是特定的并且应该设置为按钮,请与您的服务器建立约定并让您的数据指定哪个是特定密钥,例如:
{
"userId": 1,
"name": "cool name",
"specificKeyToBeTransformedIntoAButton": "userId"
}