2016-04-26 5 views
2

У меня есть словарь строк для массивов строк: {"a":["b", "c"]}. При индексировании в словаре я получаю массив строк, но проверка того, что любая строка в этом массиве всегда возвращает false. Вот код установки:Проверьте, есть ли строка в массиве внутри словаря

var dict = { 
    "first":["a", "b", "c"] 
} 
if("a" in dict["first"]){ 
    // Never hits this line 
    console.log("Found a!"); 
} 

Я довольно новыми для Javascript, так что я может быть что-то о настройке словаря объекта отсутствует, но это, кажется, довольно просто и у меня есть профессиональный опыт в нескольких языках C так что это довольно смущает, что это не работает. Что здесь не так?

+0

В 'в' проверяет оператор для свойства, такие как' "первый" в dict' или ' "0" в dict.first'. Вы хотите проверить, есть ли массив [включает] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes) элемент – Bergi

+0

Предполагаемый «дублирующий» вопрос не тоже самое! – Dagrooms

+0

@ Dagrooms: Как любой из [этих ответов] (http://stackoverflow.com/q/237104/1048572) не поможет вам проверить, есть ли строка в массиве? Является ли массив частью словаря, абсолютно не имеет значения для вашего вопроса. Или вы действительно спрашиваете, почему оператор 'in' не делает то, что, по вашему мнению, должен делать? – Bergi

ответ

3

Оператор in возвращает true, если указанное свойство находится в указанном объекте, Taken from here.

a не является свойство его значение массива, индекс массива действует как свойство и 0 in dict["first"] будет true здесь. Таким образом, здесь вы можете использовать indexOf()

var dict = { 
 
    "first": ["a", "b", "c"] 
 
} 
 
if (dict["first"].indexOf("a") > -1) { 
 
    console.log("Found a!"); 
 
}

+1

Какая жизнь. Он был отмечен как дубликат, но дублированный вопрос был не совсем таким же, и я не хочу использовать jquery в этом приложении. – Dagrooms

-1

Вы также можете использовать

var dict = { 
    "first":["c", "b", "a"] 
} 

for(x in dict["first"]){ 
    if(dict["first"][x]==='a') 
    { 
    console.log("index of a :"+x); 
    break; 
    } 

} 
0

попробовать это. это сработает для вас.

var dict = { 
    "first":["c", "b", "a"] 
}; 
console.log(dict.first); 
for(var x in dict.first){ 

    if(dict.first[x]=="a") 
    { 
    console.log("index of a :"+ x); 
    break; 
    } 
} 
} 
Смежные вопросы