2017-11-13 22 views
3

私のオブジェクト - アレイCoilArrayのオブジェクトに特定の値が含まれているかどうかを調べようとしています。オブジェクトの機能が定義されていませんjs

私は関数に hasValue

を使用しています。このため

私は私が問題を抱えているあなたが機能でfilterArray

を見ることができるように、2つの値をフィルタリングし、濾過し、配列をお返しできるようにしたいです機能hasValue

私は取得していますエラーメッセージは言う:

objが未定義

objでは、明らかに私は、関数に与えているオブジェクトであると考えられます。

なぜそれが定義されていませんか?
どうすれば定義できますか?

hasValue自体はまあ、あなたがこれにすべてのことをダウントリミングすることができ

var CoilArray = [{ 
    id: "First Coil", 
    systemId: ["System A", "System C"], 
    fieldStr: ["Str A", "Str B"], 
}, { 
    id: "Second Coil", 
    systemId: "System B", 
    fieldStr: ["Str B", "Str C"], 
}, { 
    id: "Third Coil", 
    systemId: "System C", 
    fieldStr: "Str C", 
}, ] 

function hasValue(obj, key, value) { 

    if (obj[key].indexOf(value) > -1) { 
    return true; 
    } 
} 

function filterArray(carray) { 
    var arr = new Array(); 
    for (var i = 0; i <= carray.length; i++) { 

    if (hasValue(carray[i], "systemId", "System A") && 
     hasValue(carray[i], "fieldStr", "Str B")) { 

     arr.push(carray[i].id); 
     console.log(arr[i].id); 
    } 
    } 
    return arr; 
} 

hasValue(CoilArray[0], "fieldStr", "Str A"); 

filterArray(CoilArray); 
+0

filter機能を使用するために(他の人とコードを共有する場合インスタンスには、助けを求める)、時間をインデントし、コードを読みやすく、一貫した方法でフォーマットしてください。 (他の人とコードを共有していなくても良いアイデアです)(私はコードを作成し、http://jsbeautifier.org [no affiliation]を通じて実行し、この機会に余分な空白行を削除しました。 [ああ、でもFranは元に戻しましたが、同様のことをしました]) –

+2

'for(var i = 0; i <= carray.length; i ++){'あなたは配列の最後を1回過ぎています。 –

+0

コードと質問を同時に書式設定していましたが、私はちょうどあなたの後に保存しなければなりません。申し訳ありません@ T.J.Crowder – Nope

答えて

0

かかわらず動作しているようです。システムIDは、私が参照される配列がある場合は、チェックを確認するには、このanswer

var filteredArray = CoilArray.filter(function (obj) { 
    let isSystemA = false; 
    let isStrB = false; 

    // If Array then check if Array has value 
    if (obj.systemId.constructor == Array) { 
     isSystemA = obj.systemId.includes("System A") && isStrB; 
    } else { 
     isSystemA = obj.systemId === "System A"; 
    } 

    if (obj.fieldStr.constructor == Array) { 
     isStrB = obj.fieldStr.includes("Str B") && isStrB; 
    } else { 
     isStrB = obj.fieldStr === "Str B"; 
    } 

    return isSystemA && isStrB; 
}); 

これは、あなたがあなた自身のコードに好きですが、何ができるのは明らか

+0

ありがとうございます。私は 'filter()'で解決しようとしましたが、 'CoilArray'で定義されている一つのキーの複数のオブジェクト値に対しては機能しません(例えばfieldStr:[" Str B "、" Str C "])。私が探している両方のキーは1つの値しか持たないので、3番目のオブジェクトだけをフィルタリングすることができます。 上記のコードはうまく動作しますが、 'hasValue()'の 'obj'がなぜstatetが' undefined'なのかわかりません。 これを手伝ってもらえますか? –

+0

@MaxGroh私は自分の答えを調整するつもりです – Lokuzt

関連する問題