2016-09-09 3 views
8

this tutorialの後に、一意の番号が配列オブジェクト内にある場合は「検出」します。この番号は文字列です。'instanceof'の右側が呼び出し可能ではありません

ES6:私はので、私は等価探し(JavaScriptの)と反応Ruby on Railsにでdetectに慣れ

現実に

... 


// this will be "data" in "this.props.data" 
data = [ 
{ 
    id: 1, 
    order_id: "44", 
    name: "Some order number name", 
    }, 
    { 
    id: 2, 
    order_id: "65", 
    ..., 
    } 
] 

    // let num = "44"; Just for this example 

    renderCreditNote(num){ 
    if (num instanceof this.props.data) { 
     return num.map(function(p){ 
     return p.order_id 
     }); 
    } 
    } 

    render(){ 
    return({this.renderCreditNote().bind(this)}) 
    } 

... 

、これは次のようになります。 this.renderCreditNote(this.state.num).bind(this)

このnumが配列内にある場合は、その配列のみを表示します。私はこれを正しい方法でやっていますか?エラーは次のとおりです。

Uncaught TypeError: Right-hand side of 'instanceof' is not callable

+0

あなたは[array.includes]必要なように見える(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/配列/インクルード)、ここでは 'instanceof'ではありません。 – georg

+0

array.includesはどのように配列/オブジェクトを処理しますか?私はそれが動作する整数のリストを持っているが、それは入れ子になったオブジェクトのチェックを処理するのか知っていますか? –

+0

Sylar、もし私が正しく理解していれば、 'this.props.data'は何の配列ですか?そして、あなたは1. 'num'が配列内にあるかどうかをチェックし、' order_id'を返すのであれば?モバイル上の –

答えて

1

右側のインスタンスに関数を渡すことになっています。試してみてくださいthis.props.data.constructor

+0

それはエラーを取り除きますが、私は "44"の注文IDを取得していません。 – Sylar

+0

"44"を返すelse文を追加します。あなたの質問はこれについて何も言わなかった。 – Kafo

+0

試してみて後で回答してください。ありがとう – Sylar

0

私はRubyを知らないが、detectの説明に基づいて、JavaScriptでarray.findを探しているようだ。 .findは配列を反復処理します。探している項目があればそれを返し、反復処理を停止します。何も見つからない場合はundefinedが返されます。例えばので

renderCreditNote(num){ 
    return this.props.data.find(function(p){ 
     return num === p.order_id; 
    }); 
    } 

ここでフィドルです:https://jsfiddle.net/7ykt9ze3/

一部ES6のprettification:

renderCreditNote(num){ 
    return this.props.data.find(p => num === p.order_id); 
    } 

が、これは完全に少し古いブラウザではサポートされていないことに注意してください、私は経験から知っているIE11はそれを持っていません。しかし、それは確かにpolyfillの価値があります。

リンクしたブログについて - instanceofは、入力がデータ構造のものであれば基本的にtrue/falseを返します。あなたがリンクしているブログでは、入力がオブジェクトか配列かどうかを検出していますが、その入力に応じて異なるアクションをとることができます。したがって、オブジェクトの場合は、オブジェクトのフィールドを返すだけです。配列の場合は、配列を.mapで繰り返し、その配列内のオブジェクトの名前をすべて返します。

編集方法レンダリングチェックする:

render(){ 

    return(<div>{JSON.stringify(this.renderCreditNote().bind(this))}</div>) 
    } 
+0

私は参照してください。私はこれを試して報告します。 – Sylar

+0

これで 'ncaught不変違反:オブジェクトはリアクションの子としては無効です。子コレクションをレンダリングする場合は、代わりに配列を使用するか、ReactアドオンのcreateFragment(オブジェクト)を使用してオブジェクトをラップします。 Check render menthod' – Sylar

+0

これは反応エラーです。レンダリングメソッドはJSX/html要素を期待していますが、生のjavascriptオブジェクトを返しています。私の編集でリンクしたものを試してみてください。 –

関連する問題