2015-06-05 1 views
0

Я просмотрел различные ответы на форумах, но не смог найти решение. Таким образом, у меня есть массив как это:Объект не поддерживает это свойство или метод "indexOf"

var valuesArray = ["negative", "underweight", "neutral", "overweight", "positive"]; 

У меня есть две переменные: var previousRating и var currentRating, который динамически получить присваивается одно из значений из valuesArray.

Я пытаюсь найти индекс previousRating и currentRating в valuesArray, как это:

var prevRatingCounter = valuesArray.indexOf(previousRating.toLowerCase()); 
var curRatingCouter = valuesArray.indexOf(currentRating.toLowerCase()); 

previousRating и curRating строковые значения, но до сих пор я получаю сообщение об ошибке:

Object doesn't support this property or method 

Может кто-то пожалуйста, помогите я понимаю это. Спасибо.

+0

Если предыдущиеRating/curRating являются строками, вы не должны сталкиваться с этой проблемой. Тем не менее, у вас есть код в реальном времени? Введите код indexOf под if (typeof previousRating === "string") –

+0

Это: Я сделал Response.Write, и они действительно строки. – DotNetNewBie

+2

Я бы предложил опубликовать блок кода, с которым у вас возникли проблемы, вместо описания бит и его частей, потому что из того, что я вижу и что вы объяснили, он должен работать. Если вы не хотите этого делать, я предлагаю использовать 'console.log()' и 'typeof' оператор прямо перед вашими этими строками, чтобы убедиться, что принуждения не происходит ранее. – galitskyd

ответ

0

Я думаю, что у вас есть проблема с инициализацией.

Это прекрасно работает:

 \t var valuesArray = ["negative", "underweight", "neutral", "overweight", "positive"]; 
 

 
    \t var previousRating = "underweight"; 
 
    \t var currentRating = "neutral"; 
 

 
    \t var valuesArray = ["negative", "underweight", "neutral", "overweight", "positive"]; 
 

 
    \t var prevRatingCounter = valuesArray.indexOf(previousRating.toLowerCase()); 
 

 
    \t var curRatingCouter = valuesArray.indexOf(currentRating.toLowerCase()); 
 

 
    \t document.write(prevRatingCounter+" "+curRatingCouter);

+0

У меня этот код в файле .asp. Разве это имеет значение? – DotNetNewBie

3

Как объяснено в this answer, версия ECMAScript используется на стороне сервера JScript для написания классического ASP, только 3,0 - метод indexOf() массивов был насколько я могу сказать, только в версии 5.0 ECMAScript, поэтому его просто не существует.

Дать такой метод не так уж трудно, вот рабочий код образца:

<% 
function IndexOf(arr, item) { 
    for (var i = 0; i < arr.length; i++) { 
     if (arr[i] == item) { 
      return i; 
     } 
    } 
    return -1; 
} 
%> 

Затем измените код, чтобы использовать его, например,

var prevRatingCounter = IndexOf(valuesArray, previousRating.toLowerCase()); 

Если вам нужно использовать его во многих разных файлах, вы можете поместить функцию в файл с именем, например. «Common.asp» затем включите его там, где вам это нужно.

+0

Я сделал то же самое, чтобы заставить мой код работать. +1 за вашу помощь – DotNetNewBie

+0

Привет, думаю, я опоздал. :) –

+0

Отличная информация. Спасибо. – DotNetNewBie

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