2017-05-10 3 views
0

私には何か問題があります。以下のコードは、 "未定義のプロパティ 'value'を読み取ることができません"というエラーメッセージを返します。この関数は、accountlistの値を検索し、送信された文字列で始まる値を返します。 squintsの提案をStartswith配列検索の機能

var accountlist = [{ 
 
    "value": "000555 - TEST ACCOUNT NAME1", 
 
    "data": "184" 
 
}, { 
 
    "value": "006666 - TEST ACCOUNT NAME2", 
 
    "data": "450" 
 
}, { 
 
    "value": "007777 - TEST ACCOUNT NAME2", 
 
    "data": "451" 
 
}]; 
 
var searchString = '000555'; 
 
var result = accountlist.findIndex((account) => { return account.value.startsWith(searchString);}, searchString) 
 
console.log(result)

+5

? 'inputlist [il] [searchkey] ... 'のように思えます。 –

+2

また、'(searchlength - 1) 'は決して一致しないことを保証します。終了インデックスは、包括的ではありません。 –

+3

...最後に、 '.findIndex()'を使って、全体をかなり減らすことができました。 'inputlist.findIndex(obj => obj [searchkey] .startsWith(inputstring))' –

答えて

1

あなたはfind関数を使用することができ返す必要があります期待どおりに機能するこの関数を使用します。 `.window`なぜ

var accountlist = [{ 
 
    "value": "000555 - TEST ACCOUNT NAME1", 
 
    "data": "184" 
 
}, { 
 
    "value": "006666 - TEST ACCOUNT NAME2", 
 
    "data": "450" 
 
}, { 
 
    "value": "007777 - TEST ACCOUNT NAME2", 
 
    "data": "451" 
 
}]; 
 

 
function findstartswith(inputlist, searchkey, inputstring) { 
 
    for (var il = 0; il < inputlist.length; il++) { 
 
     if (inputlist[il][searchkey].startsWith(inputstring)) { 
 
      alert("FOUND IT " + il + "  " + inputstring); 
 
      return il; 
 
     } 
 
    } 
 
} 
 

 
findstartswith(accountlist, "value","006666");

+0

戻り値として '0'を期待しているので、' findIndex'ではなく、 – Bergi

+0

@Bergiが完全にあなたに同意します!解明してくれてありがとう! – funcoding

0

が終わった:例では、提出 "000555" 0

var accountlist = [{ 
 
    "value": "000555 - TEST ACCOUNT NAME1", 
 
    "data": "184" 
 
}, { 
 
    "value": "006666 - TEST ACCOUNT NAME2", 
 
    "data": "450" 
 
}, { 
 
    "value": "007777 - TEST ACCOUNT NAME2", 
 
    "data": "451" 
 
}]; 
 

 
function startswith(inputlist, searchkey, inputstring) { 
 
    var searchlength = inputstring.length; 
 
    console.log("starting search"); 
 

 
    for (var il = 0; il < inputlist.length; il++) { 
 
     if (inputlist[il].window[searchkey].substring(0, (searchlength - 1)) == inputstring) { 
 
      console.log("FOUND IT " + il + "  " + inputstring); 
 
      return il 
 
     } 
 
    } 
 
} 
 

 
startswith(accountlist, "value","000555");