我收到错误“Uncaught TypeError:在运行以下内容时无法设置未定义的属性'text'
var years= new Array(113);
for(i=0;i<113;i++){
years[i]["text"]=i+1900;
years[i]["value"]=i+1900;
}
基本上,我希望用循环生成这样的东西
var years= [
{ text: "1990", value: 1990, },
{ text: "1991", value: 1991, }, //till 2012
];
任何帮助?
答案 0 :(得分:6)
你想要文字符号:
var years= new Array(113);
for(i=0;i<113;i++){
years[i] = {text: String(i + 1900), value: i + 1900};
}
您收到错误的原因是您从未向years[i]
分配任何内容,但您试图在表达式years[i]["text"]
中使用(这意味着&# 34;从i
对象获取名称来自years
的属性,然后从中获取属性"text"
。
请注意,尝试在JavaScript中为标准数组预分配空间没有任何好处,因为JavaScript标准数组aren't really arrays at all。所以也许:
var years= [];
for(i=0;i<113;i++){
years[i] = {text: String(i + 1900), value: i + 1900};
}
同样,你可以从1900
(包括)循环到2013
(不包括),而不是在循环中完成所有这些添加:
var years= [];
for(i=1900;i<2013;i++){
years.push({text: String(i), value: i});
}
答案 1 :(得分:1)
年[i]未设置为任何内容(years[i] == undefined
),因此您无法访问该文本。尝试使用以下内容:
var years = new Array(113);
for(i=0; i < 113; i++) {
years[i] = {"text": i+1900, "value": i+1900};
}
或
var years = new Array();
for(i=0; i < 113; i++) {
years.push({"text": i+1900, "value": i+1900});
}
答案 2 :(得分:0)
您的问题已经得到解答,但我建议使用数组文字符号而不是显式构造函数调用。
var years = [];
for (var i = 0; i < 133; ++i)
{
years[i] = {
text: (i + 1900).toString(),
value: i + 1900
};
}