2016-11-21 2 views
0

Я пытался два пути для достижения этой цели, пожалуйста, смотрите ниже:Каков наилучший способ выполнить блок кода на основе ввода пользователя, если он соответствует значению в массиве?

var cat = ['travel', 'business', 'environment', 'culture', 'football', 'politics', 'world', 'commentisfree', 'lifestyle', 'fashion', 'technology', 'sport', 'money', 'science']; 

var userInput = $("#mySearch").val(); 

for(var i=0; i < cat.length; i++){ 
    if (userInput == cat[i]){ 
     // do something 
    }else{ 
     // do something else 
    } 
} 

Это работало, однако условие еще было выполнено до тех пор, пока не найдено значение. Затем я попытался сбросить массив с ниже:

var userInput = $("#mySearch").val(); 

if (userInput == 'travel' || 'business' || 'environment' || 'culture' || 'football' || 'politics' || 'world' || 'commentisfree' || 'lifestyle' || 'fashion' || 'technology' || 'sport' || 'money' || 'science'){ 
    // do something 
}else{ 
    // do something else 
} 

Таким образом, также работает, однако, это срабатывает для значений, которые не между условием скобки (не совсем уверен, почему ??). Объяснения и решения более чем приветствуются! Я новичок в JS

+0

Try [.find()] (HTTPS: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find) или [.indexOf()] (https://developer.mozilla.org/nl/docs/Web/ JavaScript/Reference/Global_Objects/Array/indexOf) –

+0

хорошо подумайте об этом, вы можете n ot запустить его в другом, так как он должен проверять каждую итерацию, если есть совпадение. Вы не знаете, нет ли совпадения, пока вы не перейдете все значения. Так что это значит? Вы будете запускать его только после того, как цикл закончится, и он ничего не нашел ... – epascarello

ответ

0

Поскольку вы используете JQuery, вы можете использовать следующее:

if ($.inArray(userInput, cat) > -1) { 
    // Do something 
} else { 
    // Do something else 
} 

Надежда, что помогает!

+0

Если вы хотите использовать vanilla JS, вы можете использовать 'indexOf'. Вы можете узнать больше об этом здесь: http://www.w3schools.com/jsref/jsref_indexof.asp –

+0

Благодарим вас за это, что здесь делает «** - 1 **»? – Chima

+0

Не беспокойтесь :) Документация для 'inArray' находится здесь: https://api.jquery.com/jQuery.inArray/ - функция возвращает -1, если значение не может быть найдено в массиве. Если его можно найти в массиве, функция вернет индекс того, где он нашел значение. Если вы чувствуете, что это помогло вам, пожалуйста, не забудьте отметить правильный ответ/upvote :) –

0

Почему бы вам не использовать IndexOf он возвращает индекс встречаемости, если найденное значение в массиве еще -1

var cat = ['travel', 'business', 'environment', 'culture', 'football', 'politics', 'world', 'commentisfree', 'lifestyle', 'fashion', 'technology', 'sport', 'money', 'science']; 

var userInput = $("#mySearch").val(); 

if(cat.indexOf(userInput) !== -1){ 
    //present 
}else{ 
    //absent 
} 
+0

спасибо за это, могу ли я спросить, что делает «** - 1 **» в этом? – Chima

+0

@Chima Если элементы существуют в массиве, он вернет индекс этого элемента внутри массива, возможно, от 0 до длины-1, но если элемент не существует, он возвращает -1, следовательно -1 может использоваться как указание на то, что элемент не существует –

0

Это интересный один; Начну со своей второй части, где мы имеем

if (userInput == 'travel' || 'business' || 'environment' || 'culture' || 'football' || 'politics' || 'world' || 'commentisfree' || 'lifestyle' || 'fashion' || 'technology' || 'sport' || 'money' || 'science'){ 
 
    // do something 
 
}

Причина первая часть оценивается как истина в том, что он тестирует «truthy-Несс» из „бизнеса“, который true, строки в javascript верны. Чтобы заставить его работать по назначению, вам нужно добавить userInput === 'business'

Я думаю, что с вашим первым оператором if/else вы могли бы просто вынуть другое. Это предотвратит выполнение каких-либо действий, если условие if не было выполнено.

0

Вот решение, которое не требует JQuery:

var cat = ['travel', 'business', 'environment', 'culture', 'football', 'politics', 'world', 'commentisfree', 'lifestyle', 'fashion', 'technology', 'sport', 'money', 'science']; 

var userInput = $("#mySearch").val(); 

// Check to see if the user input is in the array. 
if(cat.indexOf(userInput) !== -1) { 
    // Input matches an array item lets do some stuff. 
} 

Функция «IndexOf» вернет индекс в массиве совпадающего элемента или «-1», если нет соответствия элементов.

0

Я бы просто отфильтровал нежелательные значения с помощью .filter, а затем выполнил требуемый код. Таким образом, вы избегаете ситуации, когда userInput может быть значением, которое не входит в ваш диапазон, и выполнять код только тогда, когда присутствует действительный ввод.

var cat = [vals...]; 
var userInput = $("#mySearch").val(); 

const inCategories = (item, i, arr) => { 
    return arr.indexOf(userInput) !== -1; }; 
}; 

if (cat.filter(inCategories).length > 0){ 
    // do stuff 
} 
0

Там же встроенный некоторых(), чтобы проверить, если входной элемент массива

var cat = ['travel', 'business', 'environment', 'culture', 'football', 'politics', 'world', 'commentisfree', 'lifestyle', 'fashion', 'technology', 'sport', 'money', 'science']; 
 
var input = 'world'; 
 
if (cat.some(x => x === input)) console.log(input + " is a category"); 
 
else console.log(input + " is not a category");

Смежные вопросы