Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.04.2014, 14:53
Аватар для light
Аспирант
Отправить личное сообщение для light Посмотреть профиль Найти все сообщения от light
 
Регистрация: 11.04.2014
Сообщений: 60

Как сравнить массив с переменной в цикле?
Есть вот такой код, где нужно заменить вот это условие i==80 || i==64 || i==16
for (i = 100; i >= 1; i--) {  
			if (i==80 || i==64 || i==16) {
				действие
			} else {
				другое действие
			}
		}

Я решил сделать массив с нужными числами, и сравнивать их с i, но не знаю как это сделать.
Подскажите пожалуйста.
Или может быть есть другой способ?
Ответить с цитированием
  #2 (permalink)  
Старый 11.04.2014, 15:01
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

var specialValues = [16, 64, 80];

for (i = 100; i >= 1; i--) {  
	if (specialValues.indexOf(i) != -1) {
		действие
	} else {
		другое действие
	}
}
Ответить с цитированием
  #3 (permalink)  
Старый 11.04.2014, 15:02
Интересующийся
Отправить личное сообщение для barkar Посмотреть профиль Найти все сообщения от barkar
 
Регистрация: 11.02.2014
Сообщений: 27

Зачем перебирать все значения массива если вам нужно 80, 64, 16, вот их и сравнивайте, это если вам нужно именно значения массива с определенными индексами, в вашем случае я так понимаю это 80 64 16, зачем гонять весь массив.

Если у вас несколько значений а цикл в 100 итераций цикл не целесообразен!

for (i = 100; i >= 1; --i)

Так производительней.

Последний раз редактировалось barkar, 11.04.2014 в 15:19.
Ответить с цитированием
  #4 (permalink)  
Старый 11.04.2014, 15:16
Аватар для light
Аспирант
Отправить личное сообщение для light Посмотреть профиль Найти все сообщения от light
 
Регистрация: 11.04.2014
Сообщений: 60

Octane,
Спасибо большое!) работает.
Но теперь другой вопрос, как из json данных получить массив?
Ответ приходит в таком виде "test": "16,64,80"
Я думал, что вставлю вот так и оно сработает, но в итоге ничего не получилось:
...
		success: function(demo){    
		var specialValues = [demo.active];
...
Ответить с цитированием
  #5 (permalink)  
Старый 11.04.2014, 15:16
Аватар для light
Аспирант
Отправить личное сообщение для light Посмотреть профиль Найти все сообщения от light
 
Регистрация: 11.04.2014
Сообщений: 60

barkar,
Нет, не совсем это упрощенный пример, на деле таких цифр несколько сотен, которые я получаю через Ajax
Ответить с цитированием
  #6 (permalink)  
Старый 11.04.2014, 15:17
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от light
заменить вот это условие i==80 || i==64 || i==16
Как вариант...

for (i = 100; i >= 1; i--) {  
	switch i {
		case 16: case 64: case 80:
			// действия
			break;
		default:
			// другие действия
	};
};

Или так
var o = {16: true, 64: true, 80: true];

for (i = 100; i >= 1; i--) {  
	if (o[i]) {
		//действие
	} else {
		//другое действие
	};
};
Ответить с цитированием
  #7 (permalink)  
Старый 11.04.2014, 15:27
Интересующийся
Отправить личное сообщение для barkar Посмотреть профиль Найти все сообщения от barkar
 
Регистрация: 11.02.2014
Сообщений: 27

Ответ приходит в таком виде "test": "16,64,80"

А пишите
var specialValues = [demo.active];
success: function(demo){
console.log(demo);
var specialValues = demo.test.split(',');
Ответить с цитированием
  #8 (permalink)  
Старый 11.04.2014, 15:33
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Лучше через объект делать - быстрее. Объект сделать можно например так:
var json = JSON.parse('{"test": "16,64,80"}');

var object = json.test.split(/\s*,\s*/).reduce(function (object, x) {
    object[x] = true;
    return object;
}, {});
Ответить с цитированием
  #9 (permalink)  
Старый 11.04.2014, 15:39
Аватар для light
Аспирант
Отправить личное сообщение для light Посмотреть профиль Найти все сообщения от light
 
Регистрация: 11.04.2014
Сообщений: 60

barkar,
Спасибо) Массив получился, только теперь код не срабатывает)
Раньше он был вида var specialValues = [16, 64, 80];
А теперь var specialValues = ["16", "64", "80"]; и соответственно ничего не выводит.
Ответить с цитированием
  #10 (permalink)  
Старый 11.04.2014, 15:40
Аватар для light
Аспирант
Отправить личное сообщение для light Посмотреть профиль Найти все сообщения от light
 
Регистрация: 11.04.2014
Сообщений: 60

Sweet,
Сложно как то) не знаю как к себе это пока применить, но ваш совет запомню, спасибо)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в цикле запустить SQL-запрос, чтобы узнать время исполнения? jsuse Серверные языки и технологии 3 11.11.2012 19:59
как лучше сравнить переменную со значениями из массива ? mitiya Общие вопросы Javascript 2 19.09.2012 22:40
Как получить Json в цикле? oleg_46 jQuery 5 21.05.2012 20:49
Как получить значение php переменной sanyalex AJAX и COMET 1 30.10.2011 22:45
Переменная от переменной или как к имени переменной конкатенировать значение другой Aderba jQuery 5 12.11.2008 15:25