Изменение переменной в цикле

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть цикл

 var names = ['apple', 'pear', 'something']
var age = ['12','344','132']
  

(у меня есть 20 таких переменных)

 for (var i = 0; i < names.length; i  ) {
    Something(names[i]);
}
  

я получаю тип чего-либо с помощью jquery var name = $('[name=id]').val();

возможно ли выполнить if else, поэтому, если var name равно любой из переменных, как здесь выше, тогда имена.длина изменится на эту.

Например, если результатом var name = $('[name=id]').val(); является возраст, то цикл изменится на

 for (var i = 0; i < age.length; i  ) {
    Something(age[i]);
}
  

Комментарии:

1. Всякий раз, когда вы обнаруживаете, что хотите использовать динамические переменные, вам действительно следует использовать объект для сопоставления имен со значениями.

Ответ №1:

Да, если вы сохраняете эти переменные в объекте.

 var container = {};
container.names = ['apple', 'pear', 'something'];
container.age = ['12','344','132'];

var name = $('[name=id]').val();

for (var i = 0; i < container[name].length; i  ) {
    Something(container[name][i]);
}
  

[править]
Вы также можете проверить, что то, что хранится в name , соответствует допустимому массиву внутри вашего контейнера, вызвав Array.isArray(container[name]) .

Ответ №2:

Вы можете достичь этого совершенно другим способом.

Определите все свои переменные в объекте, как показано ниже.

 var data = {
    names: ['apple', 'pear', 'something'],
    age: ['12','344','132'],
    //...
}
  

здесь вы получаете тип

 var name = $('[name=id]').val();
  

Теперь выполните цикл, как показано ниже, который должен быть таким, как ожидалось,

 for (var i = 0; i < data[name].length; i  ) {
    Something(data[name][i]);
}
  

Комментарии:

1. Я вижу, @ValLeNain ответил, пока я готовил проект. Это правильное решение.

Ответ №3:

То, что вы говорите, может быть возможным в зависимости от области действия ваших переменных. Например, если они установлены глобально на window , то вы потенциально могли бы использовать Something(window[name][i]); , однако я бы не рекомендовал этого делать. Вместо этого я бы настроил ваш код с объектом вместо переменных, вот так:

 var data = {
  names: ['apple', 'pear', 'something'],
  age: ['12', '344', '132']
};
  

Тогда вы можете просто делать то, что вы описываете:

 var name = $('[name=id]').val();
for (var i = 0; i < data[name].length; i  ) {
  Something(data[name][i]);
}
  

Другой способ, которым вы могли бы это сделать, — создать функцию и передать соответствующую переменную:

 var names = ['apple', 'pear', 'something']
var age = ['12','344','132']

function processItems(items) {
  for (var i = 0; i < items.length; i  ) {
    Something(items[i]);
  }
}

switch ($('[name=id]').val()) {
  case 'name':
    processItems(name);
    break;
  case 'age':
    processItems(age);
    break;
}