如果我有一个JS对象:
var foo = { 'bar' : 'baz' }
如果我知道foo
具有该基本键/值结构,但不知道密钥的名称,那么获取密钥的最简单方法是什么? for ... in
? $.each()
?我希望有更好的东西......
答案 0 :(得分:157)
您将使用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
});
答案 1 :(得分:86)
您可以单独访问每个密钥而无需迭代,如下所示:
var obj = { first: 'someVal', second: 'otherVal' };
alert(Object.keys(obj)[0]); // returns first
alert(Object.keys(obj)[1]); // returns second
答案 2 :(得分:78)
如果您想获取所有密钥,ECMAScript 5 introduced Object.keys
。这只有较新的浏览器支持,但MDC documentation提供了另一种实现(也使用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
是唯一合理的解决方案。
答案 3 :(得分:48)
鉴于你的对象:
var foo = { 'bar' : 'baz' }
要获得bar
,请使用:
Object.keys(foo)[0]
要获得baz
,请使用:
foo[Object.keys(foo)[0]]
假设有一个对象
答案 4 :(得分:14)
我遇到了同样的问题,这是有效的
//example of an Object
var person = {
firstName:"John",
lastName:"Doe",
age:50,
eyeColor:"blue"
};
//How to access a single key or value
var key = Object.keys(person)[0];
var value = person.firstName;
答案 5 :(得分:10)
这是最简单的方法。这就是我们的方法。
var obj = { 'bar' : 'baz' }
var key = Object.keys(obj)[0];
var value = obj[key];
console.log("key = ", key) // bar
console.log("value = ", value) // baz
答案 6 :(得分:9)
// iterate through key-value gracefully
const obj = { a: 5, b: 7, c: 9 };
for (const [key, value] of Object.entries(obj)) {
console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
}
参考MDN
答案 7 :(得分:7)
我没有看到除for (var key in foo)
之外的任何其他内容。
答案 8 :(得分:6)
为您提供一个班轮:
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
答案 9 :(得分:4)
最简单的方法是使用Underscore.js:
<强>键强>
_。键(对象) 检索对象属性的所有名称。
_。键({one:1,two:2,three:3}); =&GT; [“一”,“二”,“三”]
是的,你需要一个额外的库,但它很容易!
答案 10 :(得分:4)
<强> Object.keys()强> Object.keys()方法返回给定对象自己的可枚举属性的数组,其顺序与for ... in循环提供的顺序相同(不同之处在于for-in循环枚举原型链中的属性为孔)。
var arr1 = Object.keys(obj);
<强> Object.values()强> Object.values()方法返回给定对象自己的可枚举属性值的数组,其顺序与for ... in循环提供的顺序相同(不同之处在于for-in循环枚举原型链中的属性)同样)。
var arr2 = Object.values(obj);
如需更多信息,请转到here
答案 11 :(得分:4)
除了for ... in
之外别无他法。如果你不想使用它(或许是因为在每次迭代时必须测试hasOwnProperty
的效率很低?)然后使用不同的结构,例如一系列kvp:
[{ key: 'key', value: 'value'}, ...]
答案 12 :(得分:3)
既然你提到了$.each()
,这里有一个方便的方法可以在jQuery 1.6 +中运行:
var foo = { key1: 'bar', key2: 'baz' };
// keys will be: ['key1', 'key2']
var keys = $.map(foo, function(item, key) {
return key;
});
答案 13 :(得分:3)
获取对象键/值的最佳方法。
let obj = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
'key4': 'value4'
}
Object.keys(obj).map(function(k){
console.log("key with value: "+k +" = "+obj[k])
})
答案 14 :(得分:2)
用于每个循环以访问javascript中的对象或地图中的键
for(key in foo){
console.log(key);//for key name in your case it will be bar
console.log(foo[key]);// for key value in your case it will be baz
}
注意:您也可以使用
它会给你这样的 输出:Object.keys(FOO);
[巴];
答案 15 :(得分:1)
好$.each
是一个库构造,而for ... in
是原生的js,应该更好
答案 16 :(得分:1)
您可以使用Object.keys功能来获取诸如以下的键:
const tempObjects={foo:"bar"}
Object.keys(tempObjects).forEach(obj=>{
console.log("Key->"+obj+ "value->"+tempObjects[obj]);
});
答案 17 :(得分:0)
显示为字符串,只需使用:
console.log("they are: " + JSON.stringify(foo));
答案 18 :(得分:0)
如果您使用的是 AWS CloudFront 函数,那么这对您有用。
function handler(event) {
var response = event.response;
var headers = response.headers;
if("x-amz-meta-csp-hash" in headers){
hash=headers["x-amz-meta-csp-hash"].value;
console.log('hash is ' + hash);
}
}