如何使用jQuery获取数组键名?

6

I have an array like this:

var myArray = new Array();

myArray['foo'] = {
    Obj: {
        key: value
    }
};
myArray['bar'] = {
    Obj: {
        key: value
    }
};

当我执行console.log(myArray)时,只会得到空的[ ]。而当我尝试使用jQuery的each迭代数组时,函数不会运行。

我该如何获取数组中的'foo'和'bar'部分?

示例代码:

console.log(myArray); // [ ]

jQuery.each(myArray, function(key, obj) {
    console.log(key); // should be 'foo' following by 'bar'
});

此外,这个为什么有效:
jQuery.each(myArray[foo], function(obj, values) {

    // Why does this work if there are no associative arrays in JS?

});

3
在 JavaScript 中没有关联数组,当使用字符串作为键时,你有一个对象。 - adeneo
那我怎么能够使用 jQuery.each(myArray[foo], function(key, obj) { 呢?我该如何使用类似关联键数组的东西来创建项目设置数组? - beingalex
这是一个多维数组,此处为二维数组。 - Pramod S. Nikam
6个回答

3

您可以通过以下方式获取密钥:

Object.keys(variable name);

它返回一个键的数组。

3
如果您想像那样访问它,您需要将其定义为对象:
var myObj= {};

myObj.foo = ...;
myObj.bar = ...;

现在你可以通过myObj["bar"]或者myObj.bar访问属性。

注意:
如果要遍历所有属性,最好添加额外的检查。这是为了防止遍历继承来的属性。

for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        // Do stuff.
    }
}

注意:在Javascript中,数组实际上也是对象,具有您可以设置/获取的自己的属性。这就是为什么问题中的最后一个示例有效的原因。 - Ben
我会接受这个答案。我从来不知道浏览器会将数组转换成对象。 - beingalex

2

数组是一种集合,其中每个元素都有一个索引。 要向数组添加元素,可以使用push方法。

 myArray.push('someValue');

或者按照索引设置元素(如果数组长度小于索引):
 myArray.push('someValue1');
 myArray.push('someValue1');
 myArray[0] = 'new someValue1';

请注意,数组是 Object 类的实例,因此您可以添加/编辑该对象的任何属性:
myArray.foo = '1';
myArray['bar'] = '2';

在这种情况下,您不会向数组中添加新元素,而是定义对象的新属性。 如果您不想使用索引,则无需将对象创建为Array。 要创建新对象,请使用以下代码:
var myObj = {};

要获取对象的所有属性,请参见如何在不知道键的情况下获取Javascript对象的所有属性值?


0

// $.each() 函数可用于迭代任何集合,无论它是对象还是数组。

var myArray = {};
myArray['alfa'] = 0;
myArray['beta'] = 1;
$.each(myArray, function(key, value) {
      alert(key);
});

注意:查看http://api.jquery.com/jQuery.each/获取更多信息。

0
var myArray = {};

myArray['foo'] = {  'key': 'value'  }

myArray['bar'] ={  'key': 'value'  }

console.log(myArray)

jQuery.each(myArray['foo'], function(obj, values) {

   console.log(obj, values)

});

演示


0

如果您有一个对象数组,您可以使用以下函数:

var getKeys = function(obj) {
  if (!(typeof obj == "object")) return [];
  var keys = [];
  for (var key in obj) if (obj != null && hasOwnProperty.call(obj, key)) keys.push(key);
  return keys;
};

使用getKeys(myArray)将会给你一个包含所有键的数组。

这基本上是underscores _.keys(myArray)函数的简化版本。你应该考虑使用underscore。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接