假设这个JSON对象:
var obj = {
"set1": [1, 2, 3],
"set2": [4, 5, 6, 7, 8],
"set3": [9, 10, 11, 12]
};
Run Code Online (Sandbox Code Playgroud)
可以像这样检索"set2"属性:
obj["set2"]
Run Code Online (Sandbox Code Playgroud)
有没有办法通过索引检索"set2"属性?它是JSON对象的第二个属性.这当然不起作用:
obj[1]
Run Code Online (Sandbox Code Playgroud)
所以,让我们说我想要检索JSON对象的第二个属性,但我不知道它的名字 - 那我该怎么做呢?
更新:是的,我知道对象是无序属性的集合.但我不认为浏览器会混淆JSON文字/字符串定义的"原始"顺序.
Dan*_*llo 30
JavaScript中的对象是无序属性的集合.对象是哈希表.
如果希望属性按字母顺序排列,一种可能的解决方案是在单独的数组中为属性创建索引.就在几个小时前,我回答了有关Stack Overflow的问题,您可以查看:
这是一个快速适应你的对象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);
});
Run Code Online (Sandbox Code Playgroud)
然后你就可以做到以下几点:
console.log(obj[index[1]]);
Run Code Online (Sandbox Code Playgroud)
我之前引用的答案提出了一种可重用的解决方案来迭代这样的对象.这是除非你可以将你的JSON更改为@Jacob Relkin在另一个答案中建议的,这可能更容易.
1您可能希望使用该hasOwnProperty()方法来确保属性属于您的对象而不是从中继承Object.prototype.
Jac*_*kin 18
不,无法通过JavaScript对象中的索引访问元素.
如果您有权访问此JSON的源代码,那么解决此问题的方法是将每个元素更改为JSON对象,并将键放在该对象内部,如下所示:
var obj = [
{"key":"set1", "data":[1, 2, 3]},
{"key":"set2", "data":[4, 5, 6, 7, 8]},
{"key":"set3", "data":[9, 10, 11, 12]}
];
Run Code Online (Sandbox Code Playgroud)
然后,您可以以数字方式访问元素:
for(var i = 0; i < obj.length; i++) {
var k = obj[i]['key'];
var data = obj[i]['data'];
//do something with k or data...
}
Run Code Online (Sandbox Code Playgroud)
Jer*_*eke 17
我知道这是一个老问题,但我找到了一种通过索引获取字段的方法.您可以使用该Object.keys方法来完成.
当您调用该Object.keys方法时,它会按照分配的顺序返回键(请参阅下面的示例).我在以下浏览器中测试了以下方法:
我还为对象类编写了一个小扩展,以便您可以使用调用对象的第n个键getByIndex.
// Function to get the nth key from the object
Object.prototype.getByIndex = function(index) {
return this[Object.keys(this)[index]];
};
var obj1 = {
"set1": [1, 2, 3],
"set2": [4, 5, 6, 7, 8],
"set3": [9, 10, 11, 12]
};
var obj2 = {
"set2": [4, 5, 6, 7, 8],
"set1": [1, 2, 3],
"set3": [9, 10, 11, 12]
};
log('-- Obj1 --');
log(obj1);
log(Object.keys(obj1));
log(obj1.getByIndex(0));
log('-- Obj2 --');
log(obj2);
log(Object.keys(obj2));
log(obj2.getByIndex(0));
// Log function to make the snippet possible
function log(x) {
var d = document.createElement("div");
if (typeof x === "object") {
x = JSON.stringify(x, null, 4);
}
d.textContent= x;
document.body.appendChild(d);
}Run Code Online (Sandbox Code Playgroud)
Far*_*med 11
简单的解决方案,只需一行..
var obj = {
"set1": [1, 2, 3],
"set2": [4, 5, 6, 7, 8],
"set3": [9, 10, 11, 12]
};
obj = Object.values(obj);
obj[1]....
Run Code Online (Sandbox Code Playgroud)
在这里,您可以访问"set2"属性如下:
var obj = {
"set1": [1, 2, 3],
"set2": [4, 5, 6, 7, 8],
"set3": [9, 10, 11, 12]
};
var output = Object.keys(obj)[1];
Run Code Online (Sandbox Code Playgroud)
Object.keys将提供的对象的所有键作为Array返回..
Jeroen Vervaeke的答案是模块化的并且工作正常,但是如果它与 jQuery 或其他依赖 Javascript 的“对象作为哈希表”功能的库一起使用,它可能会导致问题。
我对其进行了一些修改以使其可用于这些库。
function getByIndex(obj, index) {
return obj[Object.keys(obj)[index]];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
127145 次 |
| 最近记录: |