Javascript:添加键值对文本,给出未定义的结果
我上次考试的时候它还可以,但现在它给我带来了困难。。基本上我有这个代码:Javascript:添加键值对文本,给出未定义的结果,javascript,jquery,Javascript,Jquery,我上次考试的时候它还可以,但现在它给我带来了困难。。基本上我有这个代码: var myOBJ = {}; for (var i = 0; i < myitems.length; i++) { myOBJ[i].itemtype = myitems.type; myOBJ[i].name = myitems.name; } 有人能告诉我我遗漏了什么吗?您必须在试图创建的每个元素中初始化一个对象,所以基本上要这样做: var myOBJ = {}; f
var myOBJ = {};
for (var i = 0; i < myitems.length; i++) {
myOBJ[i].itemtype = myitems.type;
myOBJ[i].name = myitems.name;
}
有人能告诉我我遗漏了什么吗?您必须在试图创建的每个元素中初始化一个对象,所以基本上要这样做:
var myOBJ = {};
for (var i = 0; i < myitems.length; i++) {
// Create a new object here.
myOBJ[i] = {};
myOBJ[i].itemtype = myitems.type;
myOBJ[i].name = myitems.name;
}
现在我不知道您的myitems
对象是如何工作的,但是如果它包含两个名为name
和type
的键,那么您实际上无法对它进行数字迭代,因为它是一个对象,因此没有length
属性。所以你可能会在那里出错。假设它实际上是一个包含嵌套对象的数组,这些嵌套对象包含type
和name
,您可以轻松地对其进行迭代,然后使用push()
向数组中添加object literal
,如下所示:
var myOBJ = [];
for (var i = 0; i < myitems.length; i++) {
// Create and push new object here.
myOBJ.push({
itemtype : myitems[i].type,
name : myitems[i]. name
});
}
var myOBJ=[];
对于(var i=0;i
您必须在试图创建的每个元素中初始化一个对象,因此基本上要这样做:
var myOBJ = {};
for (var i = 0; i < myitems.length; i++) {
// Create a new object here.
myOBJ[i] = {};
myOBJ[i].itemtype = myitems.type;
myOBJ[i].name = myitems.name;
}
现在我不知道您的myitems
对象是如何工作的,但是如果它包含两个名为name
和type
的键,那么您实际上无法对它进行数字迭代,因为它是一个对象,因此没有length
属性。所以你可能会在那里出错。假设它实际上是一个包含嵌套对象的数组,这些嵌套对象包含type
和name
,您可以轻松地对其进行迭代,然后使用push()
向数组中添加object literal
,如下所示:
var myOBJ = [];
for (var i = 0; i < myitems.length; i++) {
// Create and push new object here.
myOBJ.push({
itemtype : myitems[i].type,
name : myitems[i]. name
});
}
var myOBJ=[];
对于(var i=0;i您的myOBJ
的单个元素最初未定义
必须创建一个新对象以包含以下属性:
myOBJ[i] = {};
myOBJ[i].itemtype = myitems.type;
myOBJ[i].name = myitems.name
或者,更有效的方法是,使用对象文字初始化它:
myOBJ[i] = {
itemtype: myitems.type,
name: myitems.name
};
由于您只使用数值索引,您还应该考虑使用数组<代码> []/COD>而不是对象<代码> {} /代码>变量<代码> MyObj .< /P> < P>您的各个元素<代码> MyObj最初是未定义的。
必须创建一个新对象以包含以下属性:
myOBJ[i] = {};
myOBJ[i].itemtype = myitems.type;
myOBJ[i].name = myitems.name
或者,更有效的方法是,使用对象文字初始化它:
myOBJ[i] = {
itemtype: myitems.type,
name: myitems.name
};
由于您只使用数值索引,您还应该考虑使用数组<代码> []/COD>而不是对象<代码> {} /代码>变量<代码> MyObj .< /P> < P>您不能通过索引访问对象文字,必须通过<强>键< /强>访问.
如果
myOBJ
是一个数组,那么您可以通过索引访问它。或者,如果myOBJ
的键是数字,那么代码就可以工作了
如果您先实例化每个对象,您可以很容易地将每个键设置为一个数字,然后通过某种伪索引访问每个对象
myOBJ[i] = {};
这将输出如下内容:
{
1: {};
//etc.
}
但是为什么不简单地将myOBJ
设置为数组呢?您不能通过索引访问对象文本,必须通过键访问它
如果myOBJ
是一个数组,那么您可以通过索引访问它。或者,如果myOBJ
的键是数字,那么代码就可以工作了
如果您先实例化每个对象,您可以很容易地将每个键设置为一个数字,然后通过某种伪索引访问每个对象
myOBJ[i] = {};
这将输出如下内容:
{
1: {};
//etc.
}
但为什么不简单地将myOBJ
制作成一个数组呢?如果您只想将myitems
中的值复制到myOBJ
中的另一个对象,我建议您将myOBJ
更改为数组,在循环中创建一个临时对象,并将该临时对象添加到myOBJ数组中
var myOBJ = [];
for (var i = 0; i < myitems.length; i++) {
var item = myitems[i];
var temp = {
'itemtype' : item.type,
'name' : item.name
};
myOBJ[i] = temp; // (or) myOBJ.push(temp);
}
var myOBJ=[];
对于(var i=0;i
您甚至可以保留myOBJ={}
,但它将只是一个对象,每个属性都是一个语义上与数组相同的Number
,因此请改用数组。如果您只想将值从myitems
复制到myOBJ
中的另一个对象,我建议您将myOBJ
更改为Array
,在循环中创建一个临时对象,并将该临时对象添加到myOBJ数组中
var myOBJ = [];
for (var i = 0; i < myitems.length; i++) {
var item = myitems[i];
var temp = {
'itemtype' : item.type,
'name' : item.name
};
myOBJ[i] = temp; // (or) myOBJ.push(temp);
}
var myOBJ=[];
对于(var i=0;i
您甚至可以保留myOBJ={}
,但它将只是一个对象,每个属性都是一个Number
,在语义上与数组相同,因此,请改用数组。myitems的结构是什么?您必须调试代码或打印myOBJ将返回的内容。知道myitems的内部内容(至少其结构)可能会有所帮助。myitems没有问题…我收到它的值,@dfsqmyitems
的结构是什么?您必须调试代码或打印myOBJ将返回的内容。知道myitems
中的内容(至少它的结构)可能会有所帮助。myitems没有问题……我收到了它的值,@dfsq实际上,您可以用与数组
相同的方式使用它,它只是没有长度属性(因此{0:“零”,1:“一”,2:“二”}
是一个函数等价于[“零”,“一”,“二”]
条长度属性和它没有数字排序的事实(因此它可以是{1:“一”,0:“零”,2:“二”}
)@something是的,你说得对