获取TreeView的JSON的第一个属性键

Get first property key of JSON for a TreeView

本文关键字:属性 第一个 JSON TreeView 获取      更新时间:2023-09-26

感谢您回答前两个问题。我有一个新的,这个是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);
}

但最终在调试中发现,isFirstIndex函数中的key与字符串进行了比较。假设我有一个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
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"
}