2017-07-05 13 views
2

私はjavascriptを初めて使用しており、このコードを以下で試しています。ゼロを返す位置に番号を持つ配列関数

このコードは正常に動作していましたが、現在は-1しか返されていないようです。

Array.prototype.nthIndexOf = function (element,location) { 
 
    var index = -1; 
 
    for(var i=0; i< this.length; i++) { 
 
     if(element === this[i] && !--location) { 
 
      index = i; 
 
      break; 
 
     } 
 
    } 
 
    return index; 
 
} 
 

 
var findNumber = prompt("Please enter number to be found"); 
 
var positionAt = prompt("Please enter position"); 
 

 
var position = [1, 2, 3, 3, 2, 89, 34, 12].nthIndexOf(findNumber, positionAt); 
 
console.log(position); // position is -1 all the time

+1

?出力が異なるために 'positionAt'が常に' 1'に等しくなければならないのはなぜですか? – evolutionxbox

+3

['Array.prototype.indexOf()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)の何が問題になっていますか? –

+0

'prompt'は文字列を返しますが、配列には数字が含まれています。 – Thomas

答えて

4

あなたがプロンプト入力から文字列値を取得しているようプロンプトからの番号になっている値を変換するためのparseInt()を使用するようになりました。これもhttps://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/parseInt

と: - - :

このページをお読みくださいdifference between parseInt() and parseFloat()

Array.prototype.nthIndexOf = function (element,location) { 
 
    var index = -1; 
 
    for(var i=0; i< this.length; i++) { 
 
     if(element === this[i] && !--location) { 
 
      index = i; 
 
      break; 
 
     } 
 
    } 
 
    return index; 
 
} 
 

 
var findNumber = parseInt(prompt("Please enter number to be found")); 
 
var positionAt = parseInt(prompt("Please enter position")); 
 

 
// The type of operator will tell you type of object you are getting 
 
// Remove parseInt above and check console log you will get string for findNumber type 
 
console.log(typeof findNumber); 
 

 
var position = [1, 2, 3, 3, 2, 89, 34, 12].nthIndexOf(findNumber, positionAt); 
 

 
if(position !== -1) { 
 
    console.log(findNumber + " located at " + position); 
 
}else { 
 
    console.log("Occurrence " + positionAt + " of number " + findNumber + " not found"); 
 
}

+0

ここでは、リンクのみの回答が目立たない。私はあなたが以前にそれを知っていたといいなあ。 –

+0

@PraveenKumar: - 申し訳ありません!だから私は質問に答えを投稿する必要があります。 – MiHawk

+0

ええと... ':)'とにかく、あなたはいいです。 –

0

現在のところ、それはprompt()の文字列値と比較されます。常に文字列を返し、タイプも含めて===の厳密な比較を行っています。正しいタイプキャストになるようにparseInt()を使用してください。代わりに、これらすべての

Array.prototype.nthIndexOf = function(element, location) { 
    var index = -1; 
    element = parseInt(element, 10); 
    for (var i = 0; i < this.length; i++) { 
    if (element === parseInt(this[i]) && !--location) { 
     index = i; 
     break; 
    } 
    } 
    return index; 
} 

スニペット

Array.prototype.nthIndexOf = function(element, location) { 
 
    var index = -1; 
 
    element = parseInt(element, 10); 
 
    for (var i = 0; i < this.length; i++) { 
 
    if (element === parseInt(this[i]) && !--location) { 
 
     index = i; 
 
     break; 
 
    } 
 
    } 
 
    return index; 
 
} 
 

 

 
var findNumber = prompt("Please enter number to be found"); 
 
var positionAt = prompt("Please enter position"); 
 

 
var position = [1, 2, 3, 3, 2, 89, 34, 12].nthIndexOf(findNumber, positionAt); 
 
console.log(position); // position is -1 all the time

、あなたはArray.prototype.indexOf使用することができます!

0

プロンプトから数値に値を変更するには、Number()を使用する必要があります。プロンプトは常に文字列値を返します。この関数が何を意味している何

Array.prototype.nthIndexOf = function (element,location) { 
 
    var index = -1; 
 
    for(var i=0; i< this.length; i++) { 
 
     if(element === this[i] && !--location) { 
 
      index = i; 
 
      break; 
 
     } 
 
    } 
 
    return index; 
 
} 
 

 
var findNumber = prompt("Please enter number to be found"); 
 
var positionAt = prompt("Please enter position"); 
 

 
var position = [1, 2, 3, 3, 2, 89, 34, 12].nthIndexOf(Number(findNumber), Number(positionAt)); 
 
console.log(position); // position is -1 all the time

関連する問題