【问题标题】:Jquery each function not working for string indexed arraysJquery 每个函数不适用于字符串索引数组
【发布时间】:2025-11-28 01:50:02
【问题描述】:

我无法让 $.each() jquery 函数与字符串索引数组一起使用,知道有什么问题吗?

示例@JSFiddle --> http://jsfiddle.net/WKDUA/

代码:

var firstArray = [52, 33];

document.writeln("First Array:\n<ul>");
$.each(firstArray, function(key, value)
{
    document.writeln('<li>[' + key + ']: ' + value + "</li>\n");
});
document.writeln("</ul>\n");


var secondArray = new Array();

secondArray['first'] = 'foo';
secondArray['second'] = 'bar';

document.writeln("Second Array:\n<ul>");
$.each(secondArray, function(key, value)
{
    document.writeln('<li>[' + key + ']: ' + value + "</li>\n");
});
document.writeln("</ul>\n");

输出:

First Array:
   [0]: 52
   [1]: 33
Second Array:

【问题讨论】:

  • 它实际上是一个对象,而不是数组

标签: javascript jquery arrays iteration


【解决方案1】:

array 始终由表示元素位置的整数索引。

您正在寻找一个object,您可以通过括号表示法访问其属性:

var obj = {};

obj['first'] = 'foo';
obj['second'] = 'bar';

document.writeln("Second Array:\n<ul>");
$.each(obj, function(key, value)
{
    document.writeln('<li>[' + key + ']: ' + value + "</li>\n");
});
document.writeln("</ul>\n");

在您的原始代码中,从未输入过 $.each 块,因为您没有向数组中添加任何元素。您确实在该数组上定义了属性firstsecond 并为它们分配了值。

示例: http://jsfiddle.net/ddTPu/

【讨论】:

  • 一个有趣的事情是,当你用var obj = [];而不是var obj = {};开始这个脚本时,你可以console.log你的?array?长度为 0 但具有索引内容,但不能像使用 $.each() 的对象一样循环遍历它。想知道我真正创建了什么实例。
【解决方案2】:

字符串索引数组(也称为关联数组)是对象,而不是数组。
数组只能有数字作为索引(它甚至可以是 Math.PI,因为它是一个数字)。
解决方案是将您的 secondArray 声明为对象:

var secondArray = {};// or var secondArray = new Object();

你可以看到here a working example

【讨论】: