[英]How to get the key of a key/value JavaScript object
如果我有一个 JS object 像:
var foo = { 'bar' : 'baz' }
如果我知道foo
具有基本的键/值结构,但不知道键的名称,我怎样才能得到它? for... in
? $.each()
?
您将使用 for 循环在 object 内部进行迭代:
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
):
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
是唯一合理的解决方案。
鉴于您的 Object:
var foo = { 'bar' : 'baz' }
要获取bar
,请使用:
Object.keys(foo)[0]
要获得baz
,请使用:
foo[Object.keys(foo)[0]]
假设单个 object
这是最简单和容易的方法。 这就是我们这样做的方式。
var obj = { 'bar': 'baz' } var key = Object.keys(obj)[0]; var value = obj[key]; console.log("key = ", key) // bar console.log("value = ", value) // baz
Object.keys(obj).forEach( function(key) {
console.log(obj[key]) // baz
})
现在您可以迭代对象并可以访问如下值 -
Object.keys(obj).forEach( function(key) { console.log(obj[key]) // baz })
为您打造的单人班轮:
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
// 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
我遇到了同样的问题,这就是有效的
//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;
获取 object 的键/值的最佳方法。
let obj = { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4' } Object.keys(obj).map(function(k){ console.log("key with value: "+k +" = "+obj[k]) })
除了for (var key in foo)
之外,我什么也没看到。
最简单的方法是只使用 Underscore.js:
钥匙
_.keys(object) 检索对象属性的所有名称。
_.keys({一:1,二:2,三:3}); => [“一”,“二”,“三”]
是的,您需要一个额外的库,但这很简单!
用于每个循环以访问 Object 中的键或 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);
它会给你这样的 output:
[酒吧];
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);
如需更多信息,请点击此处go
除了for... in
之外,别无他法。 如果您不想使用它(可能是因为必须在每次迭代中测试hasOwnProperty
效率很低?)然后使用不同的构造,例如 kvp 数组:
[{ key: 'key', value: 'value'}, ...]
既然您提到$.each()
,这是一种适用于 jQuery 1.6+ 的便捷方法:
var foo = { key1: 'bar', key2: 'baz' };
// keys will be: ['key1', 'key2']
var keys = $.map(foo, function(item, key) {
return key;
});
您可以使用 Object.keys 功能来获取以下密钥:
const tempObjects={foo:"bar"}
Object.keys(tempObjects).forEach(obj=>{
console.log("Key->"+obj+ "value->"+tempObjects[obj]);
});
嗯$.each
是一个库结构,而for... in
是原生 js,应该更好
要显示为字符串,只需使用:
console.log("they are: " + JSON.stringify(foo));
如果您使用的是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);
}
}
您好,请验证您在 pretagteams.com 上的所有答案如何在 JavaScript 中获取对象的键和值
const object1 = {
a: 'somestring',
b: 42
}
Object.entries(object1) // Array(2) [["a", "something"], ["b", 42]]
.forEach(([key, value]) => console.log(`${key}: ${value}`))
// "a: somestring"
// "b: 42"
可读且简单的解决方案:
const object1 = { first: 'I am first', second: 'I am second' }; for (const [key, value] of Object.entries(object1)) { console.log(`${key}: ${value}`); } // expected output: // "first: I am first" // "second: I am second"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.