Как сравнить массив с переменной в цикле?
Есть вот такой код, где нужно заменить вот это условие i==80 || i==64 || i==16
for (i = 100; i >= 1; i--) { if (i==80 || i==64 || i==16) { действие } else { другое действие } } Я решил сделать массив с нужными числами, и сравнивать их с i, но не знаю как это сделать. Подскажите пожалуйста. Или может быть есть другой способ? |
var specialValues = [16, 64, 80]; for (i = 100; i >= 1; i--) { if (specialValues.indexOf(i) != -1) { действие } else { другое действие } } |
Зачем перебирать все значения массива если вам нужно 80, 64, 16, вот их и сравнивайте, это если вам нужно именно значения массива с определенными индексами, в вашем случае я так понимаю это 80 64 16, зачем гонять весь массив.
Если у вас несколько значений а цикл в 100 итераций цикл не целесообразен! for (i = 100; i >= 1; --i) Так производительней. |
Octane,
Спасибо большое!) работает. Но теперь другой вопрос, как из json данных получить массив? Ответ приходит в таком виде "test": "16,64,80" Я думал, что вставлю вот так и оно сработает, но в итоге ничего не получилось: ... success: function(demo){ var specialValues = [demo.active]; ... |
barkar,
Нет, не совсем это упрощенный пример, на деле таких цифр несколько сотен, которые я получаю через Ajax |
Цитата:
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 { //другое действие }; }; |
Ответ приходит в таком виде "test": "16,64,80"
А пишите var specialValues = [demo.active]; success: function(demo){ console.log(demo); var specialValues = demo.test.split(','); |
Лучше через объект делать - быстрее. Объект сделать можно например так:
var json = JSON.parse('{"test": "16,64,80"}'); var object = json.test.split(/\s*,\s*/).reduce(function (object, x) { object[x] = true; return object; }, {}); |
barkar,
Спасибо) Массив получился, только теперь код не срабатывает) Раньше он был вида var specialValues = [16, 64, 80]; А теперь var specialValues = ["16", "64", "80"]; и соответственно ничего не выводит. |
Sweet,
Сложно как то) не знаю как к себе это пока применить, но ваш совет запомню, спасибо) |
Цитата:
"test": [16,64,80] |
Или используй так
specialValues.indexOf(''+i) |
Цитата:
alert( "16,64,80".indexOf(64) ); |
ksa,
Спасибо! Это то что нужно) P.s. что бы не создавать новую тему, есть глупый вопрос) У меня есть скрипт стороннего сайта, но нужен он не всегда, а только когда кликают по блоку. <script src="//ulogin.ru/js/ulogin.js"></script> Возможно ли его загружать, только при клике, а не всегда? Т.е. примерно вот так: $('#auth').click(function(){ <script src="//ulogin.ru/js/ulogin.js"></script> }); |
Если со скоростью работы не заморачиваться и не использовать объект, то лучшим вариантом будет использовать .indexOf у строки, т.к. меньше телодвижений.
|
Цитата:
|
Бивас, тест! (c)
alert( ["16","64","80"].indexOf(64) ); Не находит... alert( ["16","64","80"].indexOf(''+64) ); Находит... |
Sweet,
Кстати да) и правда работает) if (demo.test.indexOf(i) != -1) { var active = "active"; } else { var active = ""; } |
Цитата:
Вот темка была... http://javascript.ru/forum/css-html-...avascript.html И нужно учитывать, что сразу он так же не появится. Ему ведь еще подгрузиться нужно... |
Часовой пояс GMT +3, время: 02:23. |