我有一个这样的数组:
var myArray = new Array();
myArray['foo'] = {
Obj: {
key: value
}
};
myArray['bar'] = {
Obj: {
key: value
}
};
当我做console.log(myArray)
时,我只得到空的[ ]
。当我尝试使用jQuery的each
迭代数组时,函数不会运行。
如何获取数组的"foo"one_answers"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?
});
您可以通过以下方式获取密钥:
Object.keys(variable name);
它返回键数组。
如果你想这样访问它,你需要将它定义为一个对象:
var myObj= {};
myObj.foo = ...;
myObj.bar = ...;
现在您可以访问myObj["bar"]
或myObj.bar
等属性
注意:
要循环浏览所有属性,最好添加一个额外的检查。这是为了防止您在继承的属性中循环。
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
// Do stuff.
}
}
数组是一个集合,其中每个元素都有一个索引。要将元素添加到数组中,可以使用推送方法
myArray.push('someValue');
或按索引设置元素(如果数组长度<index(:
myArray.push('someValue1');
myArray.push('someValue1');
myArray[0] = 'new someValue1';
请注意,数组是Object类的一个实例,因此您可以添加/编辑此对象的任何属性:
myArray.foo = '1';
myArray['bar'] = '2';
在这种情况下,您不会将新元素添加到数组中,而是定义对象的新属性。如果您不习惯使用索引,则不需要将对象创建为Array。要创建新对象,请使用以下代码:
var myObj = {};
要获取对象的所有属性,请参见如何获取Javascript对象的所有属性值(不知道键(?
var myArray = {};
myArray['foo'] = { 'key': 'value' }
myArray['bar'] ={ 'key': 'value' }
console.log(myArray)
jQuery.each(myArray['foo'], function(obj, values) {
console.log(obj, values)
});
演示
使用对象数组可以使用以下函数:
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(将为您提供一个Keys数组。
这基本上是下划线_.keys(myArray(函数的清理版本。您应该考虑使用下划线。
//$.each((函数可用于迭代任何集合,无论它是对象还是数组。
var myArray = {};
myArray['alfa'] = 0;
myArray['beta'] = 1;
$.each(myArray, function(key, value) {
alert(key);
});
注意:结账http://api.jquery.com/jQuery.each/了解更多信息。