Answers:
如果要获取所有密钥,则可以使用ECMAScript 5Object.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
是唯一合理的解决方案。
p
给我钥匙,但是我如何获得钥匙的价值?谢谢。
您将使用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_"
怎么办?
foo[i]
如果i
是some string
?
给定您的对象:
var foo = { 'bar' : 'baz' }
要获取bar
,请使用:
Object.keys(foo)[0]
要获取baz
,请使用:
foo[Object.keys(foo)[0]]
假设一个对象
这是最简单的方法。这就是我们的方法。
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) // ['bar']
现在,您可以迭代对象,并可以访问以下值-
Object.keys(obj).forEach( function(key) {
console.log(obj[key]) // baz
})
TypeError
如果您期望键是数字,则可能会得到。因为键始终是字符串。
除了for ... in
。如果您不想使用它(可能是因为hasOwnProperty
每次迭代都要进行测试的效率很低?),那么可以使用其他结构,例如kvp的数组:
[{ key: 'key', value: 'value'}, ...]
最简单的方法是只使用Underscore.js:
键
_.keys(object)检索对象属性的所有名称。
_.keys({一个:1,两个:2,2,三个:3}); => [“一个”,“两个”,“三个”]
是的,您需要一个额外的库,但这很简单!
您可以使用Object.keys功能来获取密钥,例如:
const tempObjects={foo:"bar"}
Object.keys(tempObjects).forEach(obj=>{
console.log("Key->"+obj+ "value->"+tempObjects[obj]);
});
获取对象键/值的最佳方法。
let obj = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
'key4': 'value4'
}
Object.keys(obj).map(function(k){
console.log("key with value: "+k +" = "+obj[k])
})