如何使用jQuery循环遍历数组?该数组包含多个内部数组。

3
我是一位有用的助手,可以翻译文本。

我有一个数组的数组。我想循环遍历每个数组,对于每个数组,我想添加新键或更新现有值。

这是我的代码:

    var values = [];

    values['123'] = [];
    values['456'] = [];
    values['123']['x1'] = 'value 1';
    values['123']['x2'] = 'value 2';

我希望循环遍历值数组,并为每个数组添加新键。(即 values['123']values['456'] )。
以下是我的尝试:
$.each(values, function(index, value){

  value['x1'] = 'new value 1';
  value['x10'] = 'new value 10';
  value['x20'] = 'new value 20';
  console.log(value);

});

控制台显示此错误

TypeError: value is undefined

这里有一个fiddle

我该如何正确地循环遍历每个数组项并更新原始数组?

2个回答

1

实际上,对于您的情况,您需要使用 Object,而不是 Array

对于构建非数字索引,您应该使用 {}

{} - 用于构建 Object, [] - 用于构建 Array

jQuery.each() 可用于迭代对象数组

尝试这段代码

$(function() {
    $('#x').click(function(e) {
        var values = {}; // here

        values['123'] = {}; // here
        values['456'] = {}; // here
        values['123']['x1'] = 'value1';
        values['123']['x2'] = 'value2';


        $.each(values, function(index, value) {

            value['x1'] = 'new value 1';
            value['x10'] = 'new value 10';
            value['x20'] = 'new value 20';
            console.log(value);

        });
    });
});

成功了!你能告诉我 {} 和 [] 之间的区别吗? - Junior
1
@MikeA 在这里,values 被初始化为一个对象(请参见 {}),而不是一个数组。$.each() 函数在处理对象时将 123456 视为键,但在处理数组时将它们视为索引。这就是为什么我在下面的代码中添加了 values[index]!== undefined 条件的原因。 - Shekhar Chikara
非常感谢您的帮助。 - Junior
1
@MikeA 我已经添加了一些链接和信息。 - isvforall

0
这是因为您的values数组被初始化为索引123456。因此,$.each()函数假定数组长度为457,从元素索引0开始,尽管该索引处没有值。
为了克服这个问题,您可以简单地进行以下更改,它将起作用-
$.each(values, function(index, value){
    if(values[index] !== undefined) { 
        value['x1'] = 'new value 1';
        value['x10'] = 'new value 10';
        value['x20'] = 'new value 20';

        //Update the new values in the values object.
        values[index] = value;
        console.log(value);
    }
});

那样做虽然消除了错误,但是值现在为空,这不应该发生。 - Junior
请检查我的更新答案。之前values对象没有得到最新值的更新。现在应该按要求工作了。 - Shekhar Chikara
根据您的问题,由于您询问如何循环数组中的数组,这应该是答案。在这里,我没有改变您的数组结构。当前接受的答案通过将主数组简单地更改为对象来更改底层结构。 - Shekhar Chikara

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