我有这段代码:
wordObj.baseLang.find(function (item) {
if (item.hasOwnProperty("Example")) {
var exTranslation = wordObj.targetLang.filter(function (targetLangItem) {
if (targetLangItem.id === item.id) return targetLangItem.Example || '';
});
var obj=[item.id,wordObj.ID,lid,item.Example,(exTranslation[0] ? exTranslation[0].Example : null)];
console.log(obj);
insertquery2[1]=obj;
batchQueries.push(insertquery2);
}
});
其中:wordObj
是一个包含字段baseLang
的对象,该字段是一个对象数组(此数组中的某些对象具有键Example
)。我还有一个全局数组batchQueries
,它将保存像我试图在上面的代码块中创建的子数组。数组insertquery2
的长度为2:
insertquery2[0]
有一个字符串,例如:"insert into tablename (col1,col2,col3,col4,col5) values (?,?,?,?,?)"
和insertquery2[1]
将保存查询的实际值(这是上述代码尝试执行的操作)。我的目标是为同一个表创建插入查询数组。即:
batchQueries = [
["insert into tablename (col1,col2,col3,col4,col5) values (?,?,?,?,?)",[val1,val2,val3,val4,val5]],
["insert into tablename (col1,col2,col3,col4,col5) values (?,?,?,?,?)",[val1,val2,val3,val4,val5]],
]
(我仅限于这种阵列结构)。
我的问题是,如果我是console.log obj
,我可以为每个项目获取不同的值,同时在insertquery2[1]
中添加对象然后将其推送到全局数组将仅显示找到最后一项。
我知道这与推动价值和回调有关,但无论我尝试过什么,我都无法让它发挥作用
如何使用具有属性Example
的所有不同项目填充全局数组?
答案 0 :(得分:1)
Javascript总是按值传递。但是,如果将对象传递给函数,则“value”实际上是对该对象的引用,因此该函数可以修改该对象的属性,但不会导致函数外部的变量指向其他对象。
您只看到找到的最后一项是因为您在每次迭代中覆盖insertQuery2
(这是一个对象)中的第二个索引并将其传递给push
函数。因此,insertquery2[1]=obj;
每次修改值,并且在最后一次迭代期间修改它的最后一次。
而不是修改insertQuery2
,只需创建一个新数组:
var copyInsertQuery2 = [insertQuery2[0], obj];
并将其推送到batchQueries
。