考虑:
var object = {
foo: {},
bar: {},
baz: {}
}
我该怎么做:
var first = object[0];
console.log(first);
显然,这不起作用,因为第一个索引名为foo
,而不是0
。
console.log(object['foo']);
可以,但是我不知道它的名字叫foo。它可以命名为任何东西。我只想要第一个。
考虑:
var object = {
foo: {},
bar: {},
baz: {}
}
我该怎么做:
var first = object[0];
console.log(first);
显然,这不起作用,因为第一个索引名为foo
,而不是0
。
console.log(object['foo']);
可以,但是我不知道它的名字叫foo。它可以命名为任何东西。我只想要第一个。
Answers:
如果对象的顺序很重要,则应修改JSON模式以将对象存储在数组中:
[
{"name":"foo", ...},
{"name":"bar", ...},
{"name":"baz", ...}
]
或许:
[
["foo", {}],
["bar", {}],
["baz", {}]
]
正如Ben Alpert所指出的那样,Javascript对象的属性是无序的,并且如果您希望它们按与对象常量中指定的顺序相同的顺序枚举,则代码将被破坏—没有“ first”属性。
只是为了好玩,这在JS 1.8.5中有效
var obj = {a: 1, b: 2, c: 3};
Object.keys(obj)[0]; // "a"
这与您看到的顺序相同
for (o in obj) { ... }
如果您想要一些简洁的方法,请尝试:
for (first in obj) break;
alert(first);
包装为功能:
function first(obj) {
for (var a in obj) return a;
}
for (var key in obj) if (obj.hasOwnProperty(key)) break;
您将需要使用key
变量
Object.keys(obj)[0];
(0.072ms)比for
(1.644ms)快得多。
他们并没有真正订购,但是您可以执行以下操作:
var first;
for (var i in obj) {
if (obj.hasOwnProperty(i) && typeof(i) !== 'function') {
first = obj[i];
break;
}
}
在.hasOwnProperty()
忽略原型的对象是很重要的。
无法获得第一个元素,因为JavaScript中的“哈希”(对象)具有无序属性。最好的选择是将密钥存储在数组中:
var keys = ["foo", "bar", "baz"];
然后使用它来获取正确的值:
object[keys[0]]
使用下划线,您可以使用_.pairs来获取第一个对象条目作为键值对,如下所示:
_.pairs(obj)[0]
然后,该键将带有下一个[0]
下标,该值带有[1]
我昨天有同样的问题。我这样解决了:
var obj = {
foo:{},
bar:{},
baz:{}
},
first = null,
key = null;
for (var key in obj) {
first = obj[key];
if(typeof(first) !== 'function') {
break;
}
}
// first is the first enumerated property, and key it's corresponding key.
这不是最优雅的解决方案,而且我很确定在不同的浏览器中它可能会产生不同的结果(即,规范说不需要枚举来枚举与定义的顺序相同的属性)。但是,我的对象中只有一个属性,因此这不是问题。我只需要第一把钥匙。
您可以执行以下操作:
var object = {
foo:{a:'first'},
bar:{},
baz:{}
}
function getAttributeByIndex(obj, index){
var i = 0;
for (var attr in obj){
if (index === i){
return obj[attr];
}
i++;
}
return null;
}
var first = getAttributeByIndex(object, 0); // returns the value of the
// first (0 index) attribute
// of the object ( {a:'first'} )
基于CMS 答案。我不直接获取值,而是在键的索引处获取键并使用它来获取值:
Object.keyAt = function(obj, index) {
var i = 0;
for (var key in obj) {
if ((index || 0) === i++) return key;
}
};
var obj = {
foo: '1st',
bar: '2nd',
baz: '3rd'
};
var key = Object.keyAt(obj, 1);
var val = obj[key];
console.log(key); // => 'bar'
console.log(val); // => '2nd'
我的解决方案:
Object.prototype.__index = function(index)
{
var i = -1;
for (var key in this)
{
if (this.hasOwnProperty(key) && typeof(this[key])!=='function')
++i;
if (i >= index)
return this[key];
}
return null;
}
aObj = {'jack':3, 'peter':4, '5':'col', 'kk':function(){alert('hell');}, 'till':'ding'};
alert(aObj.__index(4));