如果我有一个 JS 对象,例如:
var foo = { 'bar' : 'baz' }
如果我知道它foo
具有基本的键/值结构,但不知道键的名称,那么获取它的最简单方法是什么?for ... in
? $.each()
? 我希望有更好的东西......
如果我有一个 JS 对象,例如:
var foo = { 'bar' : 'baz' }
如果我知道它foo
具有基本的键/值结构,但不知道键的名称,那么获取它的最简单方法是什么?for ... in
? $.each()
? 我希望有更好的东西......
您将使用 for 循环在对象内部进行迭代:
for(var i in foo){
alert(i); // alerts key
alert(foo[i]); //alerts key's value
}
或者
Object.keys(foo)
.forEach(function eachKey(key) {
alert(key); // alerts key
alert(foo[key]); // alerts value
});
您可以单独访问每个键而无需进行迭代,如下所示:
var obj = { first: 'someVal', second: 'otherVal' };
alert(Object.keys(obj)[0]); // returns first
alert(Object.keys(obj)[1]); // returns second
如果您想获取所有密钥,ECMAScript 5 引入了Object.keys
. 这仅受较新的浏览器支持,但MDC 文档提供了另一种实现(也使用for...in
btw):
if(!Object.keys) Object.keys = function(o){
if (o !== Object(o))
throw new TypeError('Object.keys called on non-object');
var ret=[],p;
for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
return ret;
}
当然,如果您同时想要键和值,那么这for...in
是唯一合理的解决方案。
鉴于您的对象:
var foo = { 'bar' : 'baz' }
要获取bar
,请使用:
Object.keys(foo)[0]
要获取baz
,请使用:
foo[Object.keys(foo)[0]]
假设单个对象
一个一个班轮为您提供:
const OBJECT = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
'key4': 'value4'
};
const value = 'value2';
const key = Object.keys(OBJECT)[Object.values(OBJECT).indexOf(value)];
window.console.log(key); // = key2