Javascript array.find() 回调将对象覆盖为全局数组

标签 javascript arrays find

我有这段代码:

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) 值 (?,?,?,?,?) “
  • 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 always passes by value. However, if you pass an object to a function, the "value" is really a reference to that object, so the function can modify that object's properties but not cause the variable outside the function to point to some other object.

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

无需修改 insertQuery2,只需创建一个新数组:

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

并将其推送到 batchQueries

关于Javascript array.find() 回调将对象覆盖为全局数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39067745/

相关文章:

javascript - 主干js传递参数

c - 当数组大小在运行时确定时,它是从堆栈分配还是从堆分配?

java - Arrays.asList() 在java中的实现

arrays - 如何从 powershell 中的扩展类型数组中提取/匹配文件类型扩展

linux - find -exec 不运行 exec 部分

javascript - 如何在 Firefox 和 Chrome 中使用 'let'(以及支持的 ECMAScript 6 功能)

javascript - 如何在wordpress函数中调用js函数?

javascript - 如何使用 for 循环创建对象数组

python - 在 Python 中是否类似于字符串中的方法 findNext()?

Linux/OpenSSL :Send find output to openssl