jQuery-使用“ for-each”循环在循环外更改变量

时间:2018-12-02 15:26:11

标签: javascript jquery arrays foreach var

我有两个变量说:

var first = "first";
var second = "second";

我想使用$ .each循环进行更改:

$.each({first, second}, function(index, value) {
    value = "changed";  // ASSUME CREATES A NEW VARIABLE?
});

console.log(first);   // DOES NOT CHANGE
console.log(second);  // DOES NOT CHANGE

这可能吗?到目前为止,我的尝试似乎并没有取得预期的结果。每个变量都应更改为“已更改”。

编辑:目标是遍历“ var first”和“ var second”并将其值更改为“ changed”,以避免:

var first = "first";
var second = "second";

first = "changed";
second = "changed";

没有循环的实际使用情况将导致我想避免使用多行first = "changed"second = "changed"代码。

编辑#2:这是实际的代码段。

var favorite_array = [
    "https://api.themoviedb.org/3/account/{account_id}/favorite/movies?api_key=",
    "https://api.themoviedb.org/3/account/{account_id}/favorite/tv?api_key=",
];

var watchlist_array = [
    "https://api.themoviedb.org/3/account/{account_id}/watchlist/movies?api_key=",
    "https://api.themoviedb.org/3/account/{account_id}/watchlist/tv?api_key=",
];

var fquery = (type == "tv") ? favorite_array[1] : favorite_array[0];
var wquery = (type == "tv") ? watchlist_array[1] : watchlist_array[0];


$.each(["fquery", "wquery"], function(index, query) {
    window[query] = window[query].replace("{account_id}", getCookie("account_id"));
    window[query] += api_key + language + "&session_id=";
});

我会提前道歉,JavaScript不是我的难题。

2 个答案:

答案 0 :(得分:0)

真的不明白为什么要这么做。

但是,这可能对您尝试做的事情有帮助:

var first = "first";
var second = "second";
$.each(["first", "second"], function(index, value) {
  window[value] = "changed";
});
console.log(first);
console.log(second);

我真的建议您改用对象或数组。

请检查@ CodePen: https://codepen.io/animatedcreativity/pen/ebdb516cb0c3e728a054ba45b415c17f/


更新:

为使其更加自动化,我建议您以“ my_”开头所有变量。请检查:

// Use something more unique than my_

var my_first = "first";
var my_second = "second";

for (var key in window) if (key.substr(0, 3) == "my_") window[key] = "changed";

console.log(my_first);
console.log(my_second);

无论您有多少个变量,只要一行就可以将所有以“ my_”开头的变量设置为“ changed”。

请检查@ CodePen https://codepen.io/animatedcreativity/pen/2de7386d83f27945c82e301982901310


更新:

最简单的方法是使用@Paulpro的建议: first = second = "changed";

答案 1 :(得分:0)

在代码中,您正在使用{first, second}创建一个临时对象,因此,当您在其中更改值时,实际变量firstsecond并没有改变,而是该对象内部的值正在更改。

因此,您必须首先将其存储为变量,然后console.logvariable[index]

但是,由于该变量不是数组,因此此处无法正常工作。 $.each()适用于数组。

因此,您必须将其转换为数组。