2016-06-21 10 views
0

これは驚きでしたが、単純な関数array.IndexOfは機能しません。Java Script array.indexOfが機能しない

$scope.nextProduct = function (pos, item) { 
    switch (pos) { 
     case 0: product = $scope.Menu[0].Breakfast 
      break 
     case 1: product = $scope.Menu[0].Lunch 
      break 
     case 2: product = $scope.Menu[0].BeforTraining 
      break 
     case 3: product = $scope.Menu[0].AfterTraining 
      break 
     case 4: product = $scope.Menu[0].Dinner 
      break 
     default: product = $scope.Menu[0].Breakfast 
      break 
    } 
    var index = product.indexOf(item.Name); 
    product[index - 1].IsSelect = false; 
    product[index + 1].IsSelected = true; 
} 

indexOf -1を返しますが、アイテムが配列に存在することを完全に確信しています。ここで何が間違っていますか? enter image description here

+0

いいえ、オブジェクトが存在しないに一致する配列を返します。その「名前」オブジェクトは、item.Nameと同じです存在する、それは非常に異なっている。 –

+0

さて、item.Nameは文字列ですね。 –

+2

オブジェクトの配列から文字列を検索すると、.Nameプロパティと一致させる方法はどのようにわかりますか? –

答えて

2

この式では、オブジェクト配列内の文字列を検索しています。

product.indexOf(item.Name); 

代わりにあなたが実行する必要があります:

var res = product.filter(function(elem){ 
    return elem.Name == someValue 
}) 

をこれはあなたの価値

+1

'map'がより適しています。例: 'var index = product.map(function(p){return p.Name;})。indexOf(item.Name);' –

+0

@OscarBarrett、はい、まさに私が必要なものです。答えとしてコメントを追加してください。 –

+0

@asdf_enel_hak、はい、あなたのソリューションは動作していますが、それは私が必要としているものではありません。 –

関連する問題