Answers:
var obj = { first: 'someVal' };
obj[Object.keys(obj)[0]]; //returns 'someVal'
使用此方法,您还可以通过索引访问其他属性。请注意!Object.keys
根据ECMAScript不能保证退货顺序,但是所有主要浏览器的实现都非正式地保证了退货顺序,有关详细信息,请阅读https://stackoverflow.com/a/23202095。
first()
或类似的东西可以解决这个问题。
尝试for … in
循环并在第一次迭代后中断:
for (var prop in object) {
// object[prop]
break;
}
您也可以Object.values(example)[0]
。
Object.keys
,因为您可以保证得到第一件。
使用Object.keys
获取属性的数组对象上。例:
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
var keys = Object.keys(example); // => ["foo1", "foo2", "foo3"] (Note: the order here is not reliable)
这里提供了文档和跨浏览器填充程序。其使用的例子可以在我的答案另一个可以找到这里。
编辑:为清楚起见,我只想回应在其他答案中正确指出的内容:javascript对象中的键顺序未定义。
没有“第一”属性。对象键是无序的。
如果使用来循环访问它们,(var foo in bar)
则会以某种顺序获得它们,但是将来可能会更改(特别是如果添加或删除其他键)。
var object = { childIndex: { .. } }; var childObject = _.find(Object);
最高答案可以生成整个数组,然后从列表中捕获。这是另一个有效的捷径
var obj = { first: 'someVal' };
Object.entries(obj)[0][1] // someVal
我不建议您使用Object.keys,因为旧IE版本不支持它。但是,如果确实需要,可以使用上面的代码来保证向后兼容性:
if (!Object.keys) {
Object.keys = (function () {
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length;
return function (obj) {
if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object');
var result = [];
for (var prop in obj) {
if (hasOwnProperty.call(obj, prop)) result.push(prop);
}
if (hasDontEnumBug) {
for (var i=0; i < dontEnumsLength; i++) {
if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]);
}
}
return result;
}})()};
功能Firefox(Gecko)4(2.0)Chrome 5 Internet Explorer 9 Opera 12 Safari 5
更多信息: https //developer.mozilla.org/zh-CN/docs/JavaScript/Reference/Global_Objects/Object/keys
但是,如果您只需要第一个,我们可以安排一个较短的解决方案,例如:
var data = {"key1":"123","key2":"456"};
var first = {};
for(key in data){
if(data.hasOwnProperty(key)){
first.key = key;
first.content = data[key];
break;
}
}
console.log(first); // {key:"key",content:"123"}
要获取对象中的第一个键名称,可以使用:
var obj = { first: 'someVal' };
Object.keys(obj)[0]; //returns 'first'
返回一个字符串,因此您无法访问嵌套对象,例如:
var obj = { first: { someVal : { id : 1} };
在这种解决方案中,您无法访问ID。
如果要获取实际对象,最好的解决方案是使用lodash,例如:
obj[_.first(_.keys(obj))].id
要返回第一个键的值,(如果您不完全知道第一个键的名称):
var obj = { first: 'someVal' };
obj[Object.keys(obj)[0]]; //returns 'someVal'
如果您知道密钥名称,请使用:
obj.first
要么
obj['first']
如果您需要访问“对象的第一个属性”,则可能意味着您的逻辑有问题。对象属性的顺序无关紧要。
使用数组而不是对象(方括号)。
var example = [ {/* stuff1 */}, { /* stuff2 */}, { /* stuff3 */}];
var fist = example[0];
请注意,您会丢失“ foo”标识符。但是您可以将name属性添加到所包含的对象中:
var example = [
{name: 'foo1', /* stuff1 */},
{name: 'foo2', /* stuff2 */},
{name: 'foo3', /* stuff3 */}
];
var whatWasFirst = example[0].name;
您可以使用Object.prototype.keys
which以相同顺序返回对象的所有键。因此,如果您想要第一个对象,只需获取该数组并将第一个元素用作所需键即可。
const o = { "key1": "value1", "key2": "value2"};
const idx = 0; // add the index for which you want value
var key = Object.keys(o)[idx];
value = o[key]
console.log(key,value); // key2 value2
我们也可以使用此方法。
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
Object.entries(example)[0][1];
这是获取第一把钥匙的一种更干净的方法:
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
var object2 = {
needThis: 'This is a value of the property',
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
let [first] = Object.keys(example)
let [firstProp] = Object.keys(object2)
console.log(first)
//Prop : needThis, Value: This is a value of the property
console.log(`Prop : ${firstProp}, Value: ${object2[firstProp]}`)
[first]
。用户未请求数组作为答案。为什么要这样做first = Object.keys(example)[0]
而无需将答案包装在数组中呢?为什么请您的清洁工?