Как javascript indexOf по-разному работает со строкой и массивом?

У меня есть и строка, и массив строк.

var strFruit = "Apple is good for health";  
var arrayFruit = ["Apple is good for health"]; 

var strResult = strFruit.indexOf("Apple"); //strResult shows 0  
var arrayResult =  arrayFruit.indexOf("Apple"); // arrayResult  shows -1  

Но если я использую arrayFruit.indexOf("Apple is good for health") arrayResult показывает 0.

И мой вопрос: почему indexOf ищет точное совпадение в элементе массива, а не в строке и чем отличаются оба поиска?

Jsfiddle

P.S: Основная причина задать этот вопрос заключается в том, что я не могу понять исходный код для indexOf. Я могу понять, что он делает (indexOf) со строкой и массивом. Но я не уверены, как он работает со строкой и массивом?(поли-заливки или исходный код).


person ManirajSS    schedule 11.10.2014    source источник


Ответы (5)


При поиске в массиве indexOf пытается найти всю строку. Например:

var arrayFruit = ["Apple", "is", "good", "for", "health"]; 
var arrayResult =  arrayFruit.indexOf("Apple"); // arrayResult will be 0

В вашем случае у вас есть только один элемент в массиве, то есть строка, представляющая "Apple is good for health". Итак, indexOf пытается сопоставить с ним "Apple". С:

"Apple is good for health" != "Apple" 

вы получите -1 в качестве ответа. Если бы вы искали всю строку, это дало бы вам 0

var arrayResult =  arrayFruit.indexOf("Apple is good for health"); /arrayResult will be 0
person avi    schedule 11.10.2014

При использовании indexOf в строке он ищет в строке аргумент, который вы ей передали. С другой стороны, при использовании его в массиве он ищет этот элемент в массиве.

Нить:

var myString = "Apple is good for health";
console.log("Apple is at", myString.indexOf("Apple"));
//Outputs "Apple is at 0"

Множество:

var myArray = ["Apple is good for health", "Another sentence", "Sentence 3"];
console.log("Apple is good for health is element", myArray .indexOf("Apple is good for health"));
//Outputs "Apple is good for health is element 0"
console.log("Sentence 3 is at", myArray.indexOf("Sentence 3"));
//Outputs "Sentence 3 is at 2"
person Winestone    schedule 11.10.2014

strFruit.indexOf("Apple") ищет строку Apple в strFruit, но arrayFruit.indexOf("Apple") ищет элемент в массиве со значением Apple

person vikas    schedule 11.10.2014

Если вы вызываете indexOf для объекта array, он будет сравнивать полный текст с каждым элементом, поэтому в вашем случае вы сравниваете одно слово с полным предложением (которое является единственным элементом в массиве), которое возвращает -1, и это нормально. Но если ты поступишь так,

var k = "Apple is good for health".split(" ");
var idx = k.indexOf("Apple"); // it will return 0
person Arindam Nayak    schedule 11.10.2014

В arrayFruit у вас есть один объект строки, и для сравнения он должен соответствовать одному и тому же объекту для result= 0

В strFruit у вас есть последовательность символов, она соответствует этой последовательности символов с indexOf

person asdf_enel_hak    schedule 11.10.2014