JavaScript循环构建数组,但变量索引未定义。

3

不要笑,我今天工作很长时间了,脑子有点生锈,对JS不太熟悉。我认为这是一个非常简单的问题,所以希望得到帮助。

optionarray = [];

for(i=0;i<response.length;i++) {

    optionarray[i]['content'] = response[i]['name'];
    optionarray[i]['value'] = response[i]['id'];
}

我在尝试将选项数组optionarray[i]添加到数组并构建它时,不断收到undefined的错误。我知道我正在做一些非常愚蠢的事情,但我只是想不起来是什么了 :)

非常感谢您提前的任何帮助。


谢谢大家的帮助。我太蠢了 :) 太过于 PHP 的思维方式了 ;) - Jimbo
4个回答

3
optionarray = [];

for(i=0;i<response.length;i++) {

    optionarray[i] = {
            'content' :response[i]['name'], 
            'value': response[i]['id']
    };

}

1

您正在尝试访问不存在的optionarray[i]属性。

每次迭代中应该执行以下操作:

  1. optionarray添加一个新对象
  2. 设置该对象的属性

您可以像这样同时执行两个操作:

optionarray = [];

for(i=0;i<response.length;i++) {
    optionarray.push({
        content: response[i]['name'],
        value: response[i]['id']
    });
}

我喜欢这个解决方案比我的更好,但我认为它是“push”而不是“push_back”。 - Eric Wendelin
@PhilParsons:糟糕!C++有个bug :) -- 已修复。 - Jon
哈,是的,我经常发现自己做类似的事情。在我看来,这是最好的方法。虽然我不明白将数据从一个数组移动到另一个数组的意义(也许我没有看到更大的画面!) - Phil Parsons

1
我认为你只需要在 for 循环内初始化 optionarray[i] 对象:
var optionarray = []; //NOTE: I added var here so because otherwise it's an implicit global

for(i=0;i<response.length;i++) {
    optionarray[i] = {};
    optionarray[i]['content'] = response[i]['name'];
    optionarray[i]['value'] = response[i]['id'];
    // BETTER: optionarray.push({content: response[i]['name'], value: response[i]['id']});
}

如果我没有记错的话。

非常感谢您的帮助,非常感激;-) - Jimbo

0

试试这个

optionarray[i] = [];
optionarray[i]['content'] = response[i]['name'];     
optionarray[i]['value'] = response[i]['id']; 

你需要先将optionarray[i]定义为数组


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