jQuery - используйте цикл for-each для изменения переменных вне цикла - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть две переменные, которые говорят:

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» и изменить их значение на «change», чтобы избежать:

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 голосов
/ 02 декабря 2018

В вашем коде вы создаете временный объект с {first, second}, поэтому, когда вы изменяете значение внутри, фактические переменные first и second не изменяются, скорее значения внутри этого объектаменяется.

Таким образом, вы должны сначала сохранить его как переменную, а затем console.log variable[index].

Но это не будет работать должным образом, поскольку эта переменная не является массивом.$.each() работает с массивами.

Так что вместо этого вы должны превратить это в массив.

0 голосов
/ 02 декабря 2018

На самом деле не понимаю, почему вы это делаете.

Но это может помочь вам в том, что вы пытаетесь сделать:

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_", в значение "change", независимо от того, сколько у вас переменных.

Пожалуйста, проверьте @ CodePen https://codepen.io/animatedcreativity/pen/2de7386d83f27945c82e301982901310


ОБНОВЛЕНИЕ:

Простейшим будет использовать предложение @ Paulpro: first = second = "changed";

...