获取 TreeView JSON 的第一个 属性 键
Get first property key of JSON for a TreeView
感谢您对前两个问题的回答。我有一个新的,这个是 jQuery 中的一个可折叠面板。这个概念是,JSON 对象的 first 键将显示为按钮,其他键将被视为常规文本,如 <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);
}
但最终在调试中发现,isFirstIndex
函数中的key
是与字符串进行比较。
假设我有一个 JSON :
{"userId" : 1, "name" : "cool name"}
我想显示任何JSON设置为按钮的第一个键,后面的属性将是普通文本。请允许我 post 一个 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
UtsavShah 的意思是 for (key in obj)
可以以任何顺序在 obj
中迭代 keys
,JS 规范不强制执行任何顺序。
事实上,JS 规范不仅对迭代不强制执行任何顺序,对内部存储也不强制执行任何顺序:每个 JS 引擎实现(因此取决于浏览器)可能会存储您的 JSON 键的顺序不限,因此即使您先写了 "userId"
, 也不意味着浏览器会将其保留为第一个键 。为此,您必须使用数组,或使用具有特定键的约定。
按照您编写代码的方式,它将在您的对象(行)中查找名为“0”的键。顺便说一句,您的 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);
}
编辑2:
如果你想要一个订单,你需要一个数组。如果你想要有序的键,你可以像这样塑造你的数据(当然这必须在服务器和客户端中实现):
[
{"userId": 1},
{"name": "cool name"}
]
如果您只需要知道哪个特定键是特定的并且应该设置为按钮,请与您的服务器制定约定并让您的数据指定哪个是特定键,例如:
{
"userId": 1,
"name": "cool name",
"specificKeyToBeTransformedIntoAButton": "userId"
}
感谢您对前两个问题的回答。我有一个新的,这个是 jQuery 中的一个可折叠面板。这个概念是,JSON 对象的 first 键将显示为按钮,其他键将被视为常规文本,如 <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);
}
但最终在调试中发现,isFirstIndex
函数中的key
是与字符串进行比较。
假设我有一个 JSON :
{"userId" : 1, "name" : "cool name"}
我想显示任何JSON设置为按钮的第一个键,后面的属性将是普通文本。请允许我 post 一个 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
UtsavShah 的意思是 for (key in obj)
可以以任何顺序在 obj
中迭代 keys
,JS 规范不强制执行任何顺序。
事实上,JS 规范不仅对迭代不强制执行任何顺序,对内部存储也不强制执行任何顺序:每个 JS 引擎实现(因此取决于浏览器)可能会存储您的 JSON 键的顺序不限,因此即使您先写了 "userId"
, 也不意味着浏览器会将其保留为第一个键 。为此,您必须使用数组,或使用具有特定键的约定。
按照您编写代码的方式,它将在您的对象(行)中查找名为“0”的键。顺便说一句,您的 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);
}
编辑2:
如果你想要一个订单,你需要一个数组。如果你想要有序的键,你可以像这样塑造你的数据(当然这必须在服务器和客户端中实现):
[
{"userId": 1},
{"name": "cool name"}
]
如果您只需要知道哪个特定键是特定的并且应该设置为按钮,请与您的服务器制定约定并让您的数据指定哪个是特定键,例如:
{
"userId": 1,
"name": "cool name",
"specificKeyToBeTransformedIntoAButton": "userId"
}