2014-11-26 2 views
0

У меня есть значение от ввода и массив с длиной, основанной на значении от ввода ... так что в качестве примера я нажал 3 на входе, и у меня будет var input = 3 и var sir = [0,1,2] ... Где я ошибаюсь, когда пытаюсь найти sir.indefOf (ввод) ??получить позицию элемента из массива

Код:

function findPositionInArray(objectToFind, array) { 
    for(var i = 0; i < array.length; i++) { 
     if (objectToFind == array[i]){ 
      return array[i].indexOf(objectToFind); 
     }else{ 
      return 0; 
     } 
    } 
} 

console.log(findPositionInArray(input, sir)); возвращает все время 0, даже если в массиве значение ввода существует, я проверил его в массиве 50 элементов, начиная от 0 до 49 ищет 5!

+0

return array.indexOf (objectToFind); –

+0

Почему вы возвращаете 'array [i] .indexOf (objectToFind)', если объект найден? –

+0

Вы отметили jQuery, но в вашем коде нет знака jQuery, и вы отключили [Rory's answer] (http://stackoverflow.com/a/27150340/1612146). Доступен ли вам jQuery или нет? – George

ответ

1

Ваш код не так: он остановится после первого элемента, потому что вы возвращаетесь 0.

Оно должно быть:

function findPositionInArray(objectToFind, array) { 
    var found = false; 
    for(var i = 0; i < array.length; i++) { 
     if(objectToFind == array[i]) found = i; 
    } 
    return found; 
} 

Но вы должны использовать, как было сказано, jQuery.inArray() или JS indexOf ...

+1

Обычно возвращается -1, если объект может 't можно найти в массиве вместо false. –

+0

Я всегда использую ложь, я думаю, что это более логично. Не могли бы вы объяснить, почему -1 лучше? – FLX

+1

Для этого '$ .inArray()' и 'Array.prototype.indexOf()' использовать это возвращаемое значение; и поскольку массивы никогда не могут иметь отрицательных индексов, он вполне подходит для законопроекта. –

3

JQuery обеспечивает $.inArray помощника для этой точной цели:

var arr = [1,2,3]; 
console.log($.inArray(1, arr)); // = 0 (the index of '1' in the array) 
+0

Thx для вашего ответа, но я предпочту сделать его алгоритмическим ... – Proless

+2

Почему? Вот источник jQuery для вышесказанного, если вы предпочитаете: http://james.padolsey.com/jquery/#v=1.10.2&fn=jQuery.inArray –

0

В качестве альтернативы, чистый раствор JavaScript, является arr.indexOf(element), который будет возвращать либо индекс в массиве, или -1, если элемент не существует.

+0

Хороший ответ, однако вы должны знать, что это не поддерживается в < IE9. –

+0

Я предполагаю, что OP не поддерживает IE, если явно не указано^_^(я использую это в своем собственном коде, soo ....) – bobbybee

+0

@RoryMcCrossan Для этого существует множество полисов: –

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