如果我有一个JS对象:

var foo = { 'bar' : 'baz' }

如果我知道foo有基本的键/值结构,但不知道键的名称,我怎么能得到它?为…在吗?$ . each () ?


当前回答

种() object .keys()方法返回给定对象自身可枚举属性的数组,其顺序与for…In循环(区别在于for-in循环也枚举原型链中的属性)。

var arr1 = Object.keys(obj);

Object.values () object .values()方法返回给定对象自身可枚举属性值的数组,其顺序与for…In循环(区别在于for-in循环也枚举原型链中的属性)。

var arr2 = Object.values(obj);

欲了解更多,请点击这里

其他回答

如果你想获得所有的键,ECMAScript 5引入了Object.keys。这只有较新的浏览器支持,但MDC文档提供了另一种实现(它也用于…顺便说一句):

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。是唯一合理的解决办法。

既然你提到了$.each(),下面是一个可以在jQuery 1.6+中工作的方便方法:

var foo = { key1: 'bar', key2: 'baz' };

// keys will be: ['key1', 'key2']
var keys = $.map(foo, function(item, key) {
  return key;
});

这是最简单易行的方法。我们就是这么做的。

Var obj = {'bar': 'baz'} var key = Object.keys(obj)[0]; Var值= obj[key]; Console.log ("key = ", key) // bar Console.log ("value = ", value) // baz .log Object.keys()是javascript方法,在对象上使用时返回一个键数组。

Object.keys(obj) // ['bar']

现在您可以迭代对象,并可以访问如下值-

Object.keys(obj).forEach( function(key) {
  console.log(obj[key]) // baz
})

你可以用for循环在对象内部迭代:

for(var i in foo){
  alert(i); // alerts key
  alert(foo[i]); //alerts key's value
}

Or

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