获取键/值JavaScript对象的关键的最佳方法
如果我有一个JS对象,如:
var foo = { 'bar' : 'baz' }
如果我知道foo
有这个基本的键/值结构,但不知道键的名字,那么最简单的方法是什么? for ... in
? $.each()
? 我希望有更好的东西….
如果你想得到所有的密钥, 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
是唯一合理的解决scheme。
你可以在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
鉴于你的对象:
var foo = { 'bar' : 'baz' }
要获得bar
,使用:
Object.keys(foo)[0]
要获得baz
,请使用:
foo[Object.keys(foo)[0]]
假设一个对象
我有同样的问题,这是工作
//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;
我没有看到别的for (var key in foo)
。
除了for ... in
以外for ... in
没有办法。 如果你不想使用它(也许是因为在每次迭代时都必须testinghasOwnProperty
效率是微乎其微的),那么使用一个不同的结构,例如一个kvp的数组:
[{ key: 'key', value: 'value'}, ...]
最简单的方法是使用Underscore.js:
按键
_.keys(object)检索对象属性的所有名称。
_.keys({one:1,two:2,three: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; });
用于每个循环访问在对象或地图在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);
它会给你这样的输出:
[酒吧];
那么$.each
是一个库构造,而for ... in
是本地js,应该更好
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);
更多请到这里
显示为一个string,只需使用:
console.log("they are: " + JSON.stringify(foo));