2017-09-14 8 views
1

私はオブジェクトのfindIndexを複数のオブジェクトを含む配列に入れようとしています。私はしばらくこのことに苦しんできましたが、あなたが見ているものに単純化してもそれを得ることはできません。私は、私は複数の事をしようとしましたmatchBetween("string1");findIndex javascriptの問題

matchBetween("string1"); 
matchBetween = function (result) { 
     let params = [ 
      { param: "string1", input: "inputstring1"}, 
      { param: "string2", input: "inputstring2"} 
      ]; 
     console.log(result, params, params.param); //Output: "string1", (2)[{...}, {... 
     let location = params.findIndex (x => Object.is(result, x)); 
     console.log(location); //outputs -1 
     return params[location].input // 'Cannot read property 'input' of undefined' 
    }; 

から「入力」オブジェクトの文字列を取得することができるように動作するかを知っているが、それは簡単に修正だと私はそれが欠けてるような気がしてください。前もって感謝します!

+1

あなたはObject.isで、それぞれの{param、input}オブジェクトを文字列と比較しています...だから、まったくマッチしません...代わりに –

+1

注: 'params .param'はオブジェクトの配列の仕組みではないので、常に定義されません –

答えて

2

Object.is(result, x)が間違っています。

実行params.findIndex (x => {console.log(x); return false;});は、各Xは、あなたは結果があるときに処理する必要があるので、あなたはジャンが述べたようにObject.is(result, x.param)、またはresult === x.param、または単に

params.find(x => x.param === result).input 

注意を使用することができます

{param: "string1", input: "inputstring1"} 
{param: "string2", input: "inputstring2"} 

どのように見えるかを確認します見つかりません。

1

は、このサンプルをお試しください:

matchBetween = function (result) { 
 
    let params = [ 
 
     { param: "string1", input: "inputstring1"}, 
 
     { param: "string2", input: "inputstring2"} 
 
     ]; 
 
    console.log(result, params, params[0].param); //Output: "string1", (2)[{...}, {...x=>x.param == result 
 
    let location = params.findIndex (function(x) { return Object.is(result, x.param); }); 
 
    console.log(location); //outputs -1 
 
    return params[location].input // 'Cannot read property 'input' of undefined' 
 
}; 
 
console.log(matchBetween("string2"));