获取键/值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));