获取键/值 javascript 对象的键的最佳方法
Posted
技术标签:
【中文标题】获取键/值 javascript 对象的键的最佳方法【英文标题】:best way to get the key of a key/value javascript object 【发布时间】:2011-09-10 06:04:31 【问题描述】:如果我有一个像这样的 JS 对象:
var foo = 'bar' : 'baz'
如果我知道foo
具有基本的键/值结构,但不知道键的名称,那么最简单的方法是什么? for ... in
? $.each()
?我希望有更好的东西......
【问题讨论】:
for ... in 有什么问题? 感觉是间接的,你必须使用hasOwnProperty。我想我会做一个库函数来做到这一点...... 【参考方案1】:您将使用 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
);
【讨论】:
如果我不想foo[i]
成为"_proto_"
怎么办?
developer.mozilla.org/en-US/docs/Web/javascript/Reference/…
不想alert()foo[i]
ifi
issome string
怎么办?
@user2284570: i 可以是字符串 - 没问题。
你不是说 for(var i in Object.keys(foo)) 【参考方案2】:
您可以单独访问每个键而无需迭代,如下所示:
var obj = first: 'someVal', second: 'otherVal' ;
alert(Object.keys(obj)[0]); // returns first
alert(Object.keys(obj)[1]); // returns second
【讨论】:
您现在可以为此目的使用扩展运算符,它看起来更好:const [firstKey, ...rest] = Object.keys(obj);
【参考方案3】:
如果您想获取所有密钥,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;
当然,如果你想要key和value,那么for...in
是唯一合理的解决方案。
【讨论】:
p
给了我密钥,但我如何获得密钥的值?谢谢。
对于键和值,使用新的 Object.entries() developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
也许这表明我的理解有限,但是对于像获取键/值这样简单的事情,这个答案似乎非常冗长(诚然可重用)。 @Michael Benin 的答案不应该被标记为最佳答案吗?
呃...其他人点击第一个链接会被重定向到匿名麻醉品吗?【参考方案4】:
给定你的对象:
var foo = 'bar' : 'baz'
要获取bar
,请使用:
Object.keys(foo)[0]
要获取baz
,请使用:
foo[Object.keys(foo)[0]]
假设一个对象
【讨论】:
【参考方案5】:为您提供一个班轮:
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
【讨论】:
【参考方案6】:这是最简单的方法。我们就是这样做的。
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() 是在对象上使用时返回键数组的 javascript 方法。
Object.keys(obj) // ['bar']
现在您可以迭代对象并可以访问如下值-
Object.keys(obj).forEach( function(key)
console.log(obj[key]) // baz
)
【讨论】:
如果您希望键是数字,您可能会收到TypeError
。因为键总是字符串。【参考方案7】:
// 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
【讨论】:
【参考方案8】:我遇到了同样的问题,这是有效的
//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[key];
【讨论】:
为什么不var value = person[key];
?这样您就不必知道要提取的值的键。【参考方案9】:
获取对象键/值的最佳方法。
let obj =
'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
'key4': 'value4'
Object.keys(obj).map(function(k)
console.log("key with value: "+k +" = "+obj[k])
)
【讨论】:
【参考方案10】:除了for (var key in foo)
,我什么也没看到。
【讨论】:
【参考方案11】:既然你提到了$.each()
,下面是一个适用于 jQuery 1.6+ 的便捷方法:
var foo = key1: 'bar', key2: 'baz' ;
// keys will be: ['key1', 'key2']
var keys = $.map(foo, function(item, key)
return key;
);
【讨论】:
【参考方案12】:最简单的方法就是使用 Underscore.js:
按键
_.keys(对象) 检索对象属性的所有名称。
_.keys(一: 1, 二: 2, 三: 3); => [“一”、“二”、“三”]
是的,您需要一个额外的库,但这很简单!
【讨论】:
@lonesomeday 是的,但下划线/lodash 在许多其他方面也很有用,因此值得一提。【参考方案13】:除了for ... in
,别无他法。如果您不想使用它(可能是因为每次迭代都必须测试hasOwnProperty
效率很低?)然后使用不同的构造,例如kvp 的数组:
[ key: 'key', value: 'value', ...]
【讨论】:
【参考方案14】:用于每个循环以访问 javascript 中的 Object 或 Maps 中的键
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】: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
【讨论】:
【参考方案16】:$.each
是库结构,而for ... in
是原生 js,应该会更好
【讨论】:
【参考方案17】:您可以使用 Object.keys 功能来获取键,例如:
const tempObjects=foo:"bar"
Object.keys(tempObjects).forEach(obj=>
console.log("Key->"+obj+ "value->"+tempObjects[obj]);
);
【讨论】:
【参考方案18】:要显示为字符串,只需使用:
console.log("they are: " + JSON.stringify(foo));
【讨论】:
【参考方案19】:如果您使用的是 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);
【讨论】:
以上是关于获取键/值 javascript 对象的键的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章