2014-09-01 3 views
-1

Привет, Im populating select> options, используя мой json, используя приведенный ниже код. Здесь я сомневаюсь, что я хочу добавить настраиваемый атрибут, только если значение «IN». Любой человек может помочь достичь этогоДобавление строки к значению массива

$.each(data, function(i, val) { 
    items.push("<option value='" + val.countryCode + "'>" + val.countryName + "</option>"); 
}); 
+2

Что вы пробовали? Просто проверьте значение 'IN' в функции (if/else). –

+0

. Добавить if condition, if (val.countrycode == 'IN') {...} –

+0

Я не хочу проверять« val.countrycode »в цикле. Можно ли добавить attr после заполнения массива – prakashstar42

ответ

0
$.each(data, function(i, val) { 
    if(val.countryCode !='IN') { 
    items.push("<option value='" + val.countryCode + "'>" + val.countryName + "</option>"); 
    } 
    else { 
    items.push("<option data-id=1 value='" + val.countryCode + "'>" + val.countryName + "</option>"); 
    } 
}); 
+1

@downvoter почитать комментарий –

+2

Имеет смысл научить новичков чем-то, что не похоже на спагетти: 1. с '{}', которые заключают тела 'if-else' 2. с правильным отступом 3. без безумного количества дублирования – zerkms

+0

приведенный выше ответ абсолютно корректен при правильном форматировании и внутри оператора ifelse мы можем дать одну строку без {}, так что это не проблема ... –

0

попробовать что-то вроде этого

$.each(data, function(i, val) { 
    items.push("<option value='" + val.countryCode +(val.countryCode == "IN" ? "data-attr = 'value'" : "" ;) "'>" + val.countryName + "</option>"); 
}); 
-1

Если я правильно понимаю ваш вопрос:

$.each(data, function(i, val) { 
    items.push("<option "+ (val.countryCode === "IN" && "data-id=1" || "") + " value='" + val.countryCode + "'>" + val.countryName + "</option>"); 
});` 
+0

Хотя технически это сработает - это ужасно нечитаемо. – zerkms

+0

Так же, как и каждый HTML-код, созданный JS. Вот почему люди (включая меня) создали шаблоны движков, которые я создал https://github.com/adriank/ACFrontend. Но вопрос в том, чтобы генерировать HTML в JS, и это однострочный :). Может также быть val.countryCode === "IN"? "data-id = 1": "" –

+0

"Так же, как каждый HTML, созданный JS", даже не закрывается. Вы можете ввести локальную переменную, чтобы сохранить результат оценки условного выражения. Вы понимаете, что '+' имеет более высокую точность, чем условный оператор? '+' также имеет более высокий приоритет, чем '==='. Поэтому он сначала запускает ''

0

В настоящее время это возможно только с if состоянием. Вы можете увеличить скорость, разбив на первый найденный результате, но вам нужно использовать для цикла:

for(var i=0;i<countryArr.length;i++) { 
    if(countryArr[i].countryCode === "IN") { 
    items.push("<option value='" + countryArr[i].countryCode + "'>" + countryArr[i].countryName + "</option>"); 
    break; 
    } 
}); 

Если вы хотите использовать forEach см this post.. Но некоторое выражение может быть проще:

countryArr.some(function(data) { 
    var check=countryArr[i].countryCode ==="IN"; 
    if(check) { 
     items.push("<option value='" + data.countryCode + "'>" + data.countryName + "</option>"); 
    } 
    return check; //some stops, if it returns true 
}); 

ECMA6 представит метод find, так что вы можете сократить это:

items.push(countryArr.find(function(data) { 
    return data.countryCode === "IN"; 
}); 
Смежные вопросы