Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript数组问题:无法读取未定义的属性_Javascript_Html_Arrays - Fatal编程技术网

Javascript数组问题:无法读取未定义的属性

Javascript数组问题:无法读取未定义的属性,javascript,html,arrays,Javascript,Html,Arrays,我试图用javascript编写一些应用程序,但我遇到了数组的问题 我有以下代码 var levels=new Array(),level={}; level.id=1;level.name="Суперваизер";level.url="supervisor"; levels.push(level); level.id=2;level.name="Торговый представитель";level.url="agent"; levels.push(level); level.id=3

我试图用javascript编写一些应用程序,但我遇到了数组的问题

我有以下代码

var levels=new Array(),level={};
level.id=1;level.name="Суперваизер";level.url="supervisor";
levels.push(level);
level.id=2;level.name="Торговый представитель";level.url="agent";
levels.push(level);
level.id=3;level.name="Группа продукта";level.url="pg_group";
levels.push(level);
level.id=4;level.name="Категория продукта";level.url="pg_category";
levels.push(level);
level.id=5;level.name="Торговая марка";level.url="pg_trademark";
levels.push(level);
level.id=6;level.name="Продукт";level.url="product";
levels.push(level);
level.id=7;level.name="Регион";level.url="region";
levels.push(level);
level.id=8;level.name="Типы т.т.";level.url="outlet_type";
levels.push(level);
level.id=9;level.name="Торговая точка";level.url="outlet";
levels.push(level);
level.id=10;level.name="Тип оплата";level.url="payment_type";
levels.push(level);
level.id=11;level.name="Филиал";level.url="filial";
levels.push(level);
level.id=12;level.name="Экспедитор";level.url="expeditor";
levels.push(level);
level.id=13;level.name="Участник проекта";level.url="action_type";
levels.push(level);

//select
var select='<select>';
for(var i=0;i<13;i++){
  var option='<option value=' + levels[i].id + '>' + levels[i].name + '</option>';
  select+=option;
  }
select+='</select>';
var levels=newarray(),level={};
级别id=1;level.name=“Сазззззз”;level.url=“主管”;
水平。推(水平);
级别id=2;level.name=“ааааааааа”;level.url=“代理”;
水平。推(水平);
级别id=3;level.name=“ГППаПаПаПаПаПаПаПааааа;level.url=“pg_group”;
水平。推(水平);
级别id=4;level.name=“аааааааааааааа;level.url=“pg_类别”;
水平。推(水平);
级别id=5;level.name=“ааааааааааааааа”;level.url=“pg_商标”;
水平。推(水平);
级别id=6;level.name=“ППППППППППцППцццц”;level.url=“产品”;
水平。推(水平);
级别id=7;level.name=“цццц”;level.url=“region”;
水平。推(水平);
级别id=8;level.name=“ццц.ц”;level.url=“出口类型”;
水平。推(水平);
级别id=9;级别名称=“ааааачааа”;level.url=“outlet”;
水平。推(水平);
级别id=10;level.name=“ааПааа”;level.url=“付款类型”;
水平。推(水平);
级别id=11;level.name=“Фааа”;level.url=“孝顺”;
水平。推(水平);
级别id=12;level.name=“Пцццц”;level.url=“expeditor”;
水平。推(水平);
级别id=13;级别名称=“Учааааааааааааа107;level.url=“操作类型”;
水平。推(水平);
//挑选
var选择=“”;

对于(var i=0;i,您可以使用匿名对象并将它们推送到数组中

levels.push({ id: 1, name: "Суперваизер", url: "supervisor" });
我建议使用
循环中的数组长度,而不是硬编码值:

for(var i = 0; i < levels.length; i++){
    //do work
}
for(变量i=0;i

正如@dystroy所说,您每次都使用相同的
级别
对象,并对其进行修改,而不是创建新对象

无论如何,您可以使用以下语法简化它:

var levels = [
    {id: 1,  name: "Суперваизер",            url: "supervisor"  },
    {id: 2,  name: "Торговый представитель", url: "agent"       },
    {id: 3,  name: "Группа продукта",        url: "pg_group"    },
    {id: 4,  name: "Категория продукта",     url: "pg_category" },
    {id: 5,  name: "Торговая марка",         url: "pg_trademark"},
    {id: 6,  name: "Продукт",                url: "product"     },
    {id: 7,  name: "Регион",                 url: "region"      },
    {id: 8,  name: "Типы т.т.",              url: "outlet_type" },
    {id: 9,  name: "Торговая точка",         url: "outlet"      },
    {id: 10, name: "Тип оплата",             url: "payment_type"},
    {id: 11, name: "Филиал",                 url: "filial"      },
    {id: 12, name: "Экспедитор",             url: "expeditor"   },
    {id: 13, name: "Участник проекта",       url: "action_type" }
];

var select = '<select>';
for(var i = 0; i < levels.length; i++) {
    select += '<option value=' + levels[i].id + '>' + levels[i].name + '</option>';
}
select += '</select>';
var级别=[
{id:1,名称:“Сззззззз”,url:“主管”},
{id:2,名称:“代理人”},
{id:3,名称:“ГБППаПаПаПППаПаПаПаПаПаПаПаП,
{id:4,名称:“ааааПаааааааПаааа107,
{id:5,名称:“ааааааааа”,url:“pgаU商标”},
{id:6,名称:“ПППбббб”,url:“产品”},
{id:7,名称:“Пццц”,url:“region”},
{id:8,名称:“titцПцц.tt.”,url:“outlet_type”},
{id:9,名称:“аааааааа”,url:“outlet”},
{id:10,名称:“аПааа”,url:“付款类型”},
{id:11,名称:“Фаа”,url:“孝顺”},
{id:12,名称:“Бimk_СПццц”,url:“expeditor”},
{id:13,名称:“УчаааааааПааааа”,url:“动作类型”}
];
var选择=“”;
对于(变量i=0;i
这段代码中有一个大问题:它总是设置同一级别的对象。而不是创建一个对象文本并不断覆盖它(这会影响已推送到数组中的所有其他实例)。每次推送一个新的空白对象文本。
array.push({id:1,name:“first one”})
等等。问题在于您没有显示的代码。上面的代码不会触发您描述的错误。(它有前面提到的大问题,但不会导致上面的错误。)投票以“无法复制”结束不是问题,但这里有一个更好的方法来创建该数组(并且没有dystroy上面提到的问题):或者当然可以使用构造函数来避免重复键入属性名。虽然这是真的,但这不是OP的问题。事实上,OP引用的代码(尽管它有一个大问题)没有表现出OP所说的行为。虽然这是真的,但显然不是OP的问题。(虽然这是更好的代码。)OP所说的错误没有被他/她引用的代码复制,但目前无法回答这个问题。