我必须在经过一些处理后从另一个数组中推送一个关联数组中的元素,并且我正在做这样的事情:
for(var i in this.aNames) {
var a = this.aNames[i];
// some processing on a
aList[i] = a;
aList.push(i);
}
但它没有给我正确的数组。
编辑:
此处aNames
是一个像这样的关联数组
'1232':'asdasdasd',
'6578':'dasdasdas'
...... and so on of about 100 elements.
我在这里使用for
因为我想在数组的每个元素中做一些更改。
然后我在页面上显示结果数组,但它显示键值和数组数据。
即。它应该只显示asdasdasd
或asdasdasd
,但它也会显示密钥,例如1232 asdasdasd 6578 dasdasdas
。
答案 0 :(得分:2)
有很多事情可能会出错......
首先,确保this
指向正确的上下文,this.aNames
实际上返回一个复杂的对象(关联数组)。
另外,aList
是什么?它是一个阵列吗?如果是,push
应该使用当前成员的密钥(成员的名称)附加您的数组。
如果要在源对象上追加成员的值,则需要执行以下操作:
var obj = {name: 'dreas'},
arr = []; // arr is an array
arr.push(obj["name"]); // arr now contains a single element, 'dreas'
在for..in
构造中,您既可以使用aList
向所谓的数组(push
)添加元素,也可以在数组中创建新成员(使用下标符号aList [ i] =“asd”,因为我在这种情况下(for..in iteration)引用成员的名字。)
因此,您需要做的是决定是否要将元素添加到数组或成员添加到对象,而不是两者。
如果您只想克隆数组,请使用for loop
。另一方面,如果你想要克隆一个对象,那不是那么简单,因为成员也可以是包含他们自己成员的复杂对象,而只是arr[i] = obj.member
只会复制指向arr[i]
的指针member
如果{{ 1}}是一个Complext对象,而不是值类型。
只是为了确保我的术语可以理解:
var anObject = {name: "dreas"},
anArray = [1,2,3];
anObject["name"] <= member (results in "dreas")
anArray[1] <= element (results in 2)