【问题标题】:Javascript array.find() callback overrides object to global arrayJavascript array.find() 回调将对象覆盖到全局数组
【发布时间】:2016-08-21 18:52:04
【问题描述】:

我有这段代码:

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 属性的所有不同项目填充全局数组?

提前致谢。如果您需要任何进一步的信息,请询问!

【问题讨论】:

    标签: javascript arrays find


    【解决方案1】:

    Javascript 总是按值传递。但是,如果将对象传递给函数,“值”实际上是对该对象的引用,因此函数可以修改该对象的属性,但不会导致函数外部的变量指向其他对象。

    您只看到找到的最后一项的原因是因为您在每次迭代中覆盖了insertQuery2(它是一个对象)中的第二个索引,并将其传递给push 函数。因此,insertquery2[1]=obj; 每次都在修改值,而最后一次修改是在最后一次迭代期间。

    不用修改insertQuery2,只需新建一个数组即可:

    var copyInsertQuery2 = [insertQuery2[0], obj];
    

    然后将其推送到batchQueries

    【讨论】:

    • 感谢您的回答。我会尝试您的建议并回复。
    • 它有效。我确实尝试了您建议的部分/类似的东西,但没有尝试子数组的副本。再次感谢!
    猜你喜欢
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 2017-06-28
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多