一尘不染

通过索引检索JSON对象的属性?

json

假设此JSON对象:

var obj = {
    "set1": [1, 2, 3],
    "set2": [4, 5, 6, 7, 8],
    "set3": [9, 10, 11, 12]
};

可以像这样检索“ set2”属性:

obj["set2"]

有没有一种方法可以通过索引检索“ set2”属性?它是JSON对象的第二个属性。这是行不通的(当然):

obj[1]

因此,假设我要检索JSON对象的第二个属性,但我不知道它的名称-那么我该怎么做?

更新: 是的,我知道对象是无序属性的集合。但是我不认为浏览器会干扰JSON文字/字符串定义的“原始”顺序。


阅读 287

收藏
2020-07-27

共1个答案

一尘不染

JavaScript中的对象是 无序 属性的集合。对象是哈希表。

如果希望按字母顺序排列属性,则一种可能的解决方案是在单独的数组中为属性创建索引。
这是对您的对象1的快速适应:

var obj = {
    "set1": [1, 2, 3],
    "set2": [4, 5, 6, 7, 8],
    "set3": [9, 10, 11, 12]
};

var index = [];

// build the index
for (var x in obj) {
   index.push(x);
}

// sort the index
index.sort(function (a, b) {    
   return a == b ? 0 : (a > b ? 1 : -1); 
});

然后,您将可以执行以下操作:

console.log(obj[index[1]]);

我之前引用的答案提出了一种可重复使用的解决方案,以迭代此类对象。除非您可以将JSON更改为另一个答案中的@JacobRelkin,否则可能会更容易。


1您可能想使用该hasOwnProperty()方法来确保属性属于您的对象,并且不继承自Object.prototype

2020-07-27