2017-10-26 9 views
0

選択した配列内のフードの名前に基づいてfoodIdを取得しようとしています。私は食べ物を見つけ出すためのフィルタを持っていますし、IDを取得するためのマップを持っていますが、フィルタは選択された配列の最初の項目をスキップしているようです。スニペットを参照してください。Javascriptフィルターは、連想配列の文字列に基づいてオブジェクト内のIDを見つける

var response = { 
 
    "status": "success", 
 
    "data": { 
 
    "foodsCount": 20, 
 
    "foodIds": [ 
 
     { 
 
     "foodId": "574", 
 
     "food": "French Fries" 
 
     }, 
 
     { 
 
     "foodId": "722", 
 
     "food": "Hamburgers" 
 
     }, 
 
     { 
 
     "foodId": "1736", 
 
     "food": "Pad See Ew" 
 
     }, 
 
     { 
 
     "foodId": "1737", 
 
     "food": "Pasta" 
 
     }, 
 
     { 
 
     "foodId": "1739", 
 
     "food": "Pho noodles" 
 
     }, 
 
     { 
 
     "foodId": "1740", 
 
     "food": "Tacos" 
 
     }, 
 
     { 
 
     "foodId": "1741", 
 
     "food": "Falafels" 
 
     }, 
 
     { 
 
     "foodId": "1742", 
 
     "food": "Burrito" 
 
     }, 
 
     { 
 
     "foodId": "1743", 
 
     "food": "Hotdogs" 
 
     } 
 
    ] 
 
    } 
 
} 
 
const selected = ["Hamburgers", "Hotdogs"]; 
 
// should return [722, 1743] 
 
const foodList = response.data.foodIds 
 
const foundFoods = foodList.filter(isInArray) 
 
const foundIds = foundFoods.map(x => parseInt(x.foodId)) 
 

 
console.log('foundIds', foundIds); 
 

 
function isInArray(item) { 
 
    return selected.indexOf(item.food) > 0 
 
}

私が選択したアレイにアイテムを追加し続けることができ、それが動作しますが、選択の最初の項目は常にisInArray機能にfalseを返します。誰もがなぜこれが最初のアイテムにしか起こらないのか知っていますか?ありがとう!

+0

アレイがゼロselected.indexOf(item.food)> = 0にselected.indexOf(item.food)> 0を作る – MStoner

+0

基づい基づかない1れます – vijaykrishnavanshi

答えて

1

isInArrayは次のようにすべきである:

function isInArray(item) { 
    return selected.indexOf(item.food) >= 0 
} 
関連する問題