gpt4 book ai didi

javascript - 如何将查询响应分配给 global.arrays,而不是 global.arrays 数组中的值?

转载 作者:行者123 更新时间:2023-11-30 13:51:25 26 4
gpt4 key购买 nike

问题:

我正在尝试将对我的 MongoDB 数据库的查询结果有效地分配给全局数组。我基本上尝试将对全局数组的引用存储在一个数组中,以便我可以将 for 循环中的查询结果分配给所有这些引用。

这似乎是不可能的。你有什么建议?


代码:

    var arrays = [global.array1, global.array2, global.array3];

var colsArray = ["array1","array2","array3"];

var promises = colsArray.map(col => global.fetchCollection(col));

Promise.all(promises).then(responses => {

for (var d = 0; d < responses.length; d++) {
arrays[d] = responses[d];
}

console.log("VALUE INSIDE ARRAY of global.arrays: "+arrays[0]);
console.log("VALUE OF global.array is still : "+global.array1);

})

输出:

VALUE INSIDE ARRAY of global.arrays:: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
VALUE OF global.array is still : undefined

注意:

这当然可行。但当然不尽如人意:

        var arrays = [global.array1, global.array2, global.array3];

var colsArray = ["array1","array2","array3"];

var promises = colsArray.map(col => global.fetchCollection(col));

Promise.all(promises).then(responses => {

global.array1 = responses[0];
global.array2 = responses[2];
global.array3 = responses[3];

})

编辑:

这不起作用:

    var arrays = [global.array1, global.array2, global.array3];

var colsArray = ["array1","array2","array3"];

var promises = colsArray.map(col => global.fetchCollection(col));

Promise.all(promises).then(responses => {

for (var d = 0; d < responses.length; d++) {
arrays[colsArray[d]] = responses[d];
}

console.log("VALUE INSIDE ARRAY of global.arrays: "+arrays[0]);
console.log("VALUE OF global.array is still : "+global.array1);

})

最佳答案

当你这样做时:

var arrays = [global.array1, global.array2, global.array3];

您将global.array1 等中的值复制数组 中。该值称为对象引用。它告诉 JavaScript 引擎数组在内存中的其他位置。 arrays[0]global.array1 之间没有持续的链接(例如);它们恰好包含相同的值。

您的代码替换数组中的值。这对 global.array1 等完全没有影响。

如果您确实有一个名为 global 的对象,那么您可以使用方括号符号(请参阅 this question's answers)对其进行索引以实际更改 global.array1 的值像这样:

for (var d = 0; d < responses.length; d++) {
global["array" + (d + 1)] = responses[d];
}

实例:

var global = {
fetchCollection(col) {
return new Promise(resolve => {
setTimeout(() => {
resolve("Response for " + col);
}, Math.floor(Math.random() * 800));
});
}
};

var colsArray = ["array1", "array2", "array3"];

var promises = colsArray.map(col => global.fetchCollection(col));

Promise.all(promises).then(responses => {
for (var d = 0; d < responses.length; d++) {
global["array" + (d + 1)] = responses[d];
}

console.log("VALUE OF global.array1 is : " + global.array1);

});

或者如果名称不是那样的数字,那么您将使用 colsArray 来获取名称:

for (var d = 0; d < responses.length; d++) {
global[colsArray[d]] = responses[d];
}

实例:

var global = {
fetchCollection(col) {
return new Promise(resolve => {
setTimeout(() => {
resolve("Response for " + col);
}, Math.floor(Math.random() * 800));
});
}
};

var colsArray = ["array1", "array2", "array3"];

var promises = colsArray.map(col => global.fetchCollection(col));

Promise.all(promises).then(responses => {
for (var d = 0; d < responses.length; d++) {
global[colsArray[d]] = responses[d];
}

console.log("VALUE OF global.array1 is : " + global.array1);

});

但我强烈建议您根本不要使用全局变量。

关于javascript - 如何将查询响应分配给 global.arrays,而不是 global.arrays 数组中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58155444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com