Rya*_*nce 196 javascript javascript-objects
考虑:
var object = {
foo: {},
bar: {},
baz: {}
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做:
var first = object[0];
console.log(first);
Run Code Online (Sandbox Code Playgroud)
显然,这不起作用,因为第一个索引是命名的foo,而不是0.
console.log(object['foo']);
Run Code Online (Sandbox Code Playgroud)
有效,但我不知道它的名字是foo.它可以被命名为任何东西.我只想要第一个.
Jac*_*cob 325
只是为了好玩,这适用于JS 1.8.5
var obj = {a: 1, b: 2, c: 3};
Object.keys(obj)[0]; // "a"
Run Code Online (Sandbox Code Playgroud)
这符合您所看到的相同顺序
for (o in obj) { ... }
Run Code Online (Sandbox Code Playgroud)
小智 204
如果你想要简洁的尝试:
for (first in obj) break;
alert(first);
Run Code Online (Sandbox Code Playgroud)
包装为功能:
function first(obj) {
for (var a in obj) return a;
}
Run Code Online (Sandbox Code Playgroud)
Luk*_*fer 77
他们没有真正订购,但你可以这样做:
var first;
for (var i in obj) {
if (obj.hasOwnProperty(i) && typeof(i) !== 'function') {
first = obj[i];
break;
}
}
Run Code Online (Sandbox Code Playgroud)
在.hasOwnProperty()忽略原型的对象是很重要的.
Rob*_*Fox 76
这不会给你第一个,因为javascript对象是无序的,但在某些情况下这很好.
myObject[Object.keys(myObject)[0]]
Run Code Online (Sandbox Code Playgroud)
Mil*_*les 61
如果对象的顺序很重要,则应修改JSON模式以将对象存储在数组中:
[
{"name":"foo", ...},
{"name":"bar", ...},
{"name":"baz", ...}
]
Run Code Online (Sandbox Code Playgroud)
或者可能:
[
["foo", {}],
["bar", {}],
["baz", {}]
]
Run Code Online (Sandbox Code Playgroud)
正如Ben Alpert指出的那样,Javascript对象的属性是无序的,如果您希望它们按照与对象文字中指定的顺序相同的顺序进行枚举,那么您的代码就会被破坏 - 没有"first"属性.
jit*_*ney 39
对于您可以使用的对象的第一个键
console.log(Object.keys(object)[0]);//print key's name
Run Code Online (Sandbox Code Playgroud)
为了价值
console.log(object[Object.keys(object)[0]]);//print key's value
Run Code Online (Sandbox Code Playgroud)
Sop*_*ert 17
没有办法获得第一个元素,因为JavaScript中的"哈希"(对象)具有无序属性.最好的办法是将密钥存储在一个数组中:
var keys = ["foo", "bar", "baz"];
Run Code Online (Sandbox Code Playgroud)
然后使用它来获得正确的值:
object[keys[0]]
Run Code Online (Sandbox Code Playgroud)
Geo*_*pty 12
使用下划线,您可以使用_.pairs将第一个对象条目作为键值对,如下所示:
_.pairs(obj)[0]
Run Code Online (Sandbox Code Playgroud)
然后键可以使用另一个[0]下标,值为[1]
Pat*_*and 10
我昨天遇到了同样的问题.我这样解决了:
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.
Run Code Online (Sandbox Code Playgroud)
不是最优雅的解决方案,我很确定它可能会在不同的浏览器中产生不同的结果(即规范说,枚举不需要按照定义的顺序枚举属性).但是,我的对象中只有一个属性,所以这不是问题.我只需要第一把钥匙.
你可以这样做:
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'} )
Run Code Online (Sandbox Code Playgroud)
小智 6
获取对象的第一个键
const myObject = {
'foo1': { name: 'myNam1' },
'foo2': { name: 'myNam2' }
}
const result = Object.keys(myObject)[0];
// result will return 'foo1'
Run Code Online (Sandbox Code Playgroud)
基于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'
Run Code Online (Sandbox Code Playgroud)