2017-12-13 27 views
0

私はこの値を持っています。私は1つのアイテムまたは複数のアイテムのいずれかになるAPIから戻ってきています。2つの配列で一致する値を見つける

私はマップして、私が望む値を返します。

const value = JSONObject.map(data => {return data.value}); 

console.log(value); // ["value"] 

複数の値がマップに存在する場合は、複数の文字列が含まれます。

今私が混乱している部分があります。

私は別のローカルJSONオブジェクトを、私はそのAPIの値と照合したいと思います。

for(i = 0; i < LocalJSONObject; i++;){ 
if(value === LocalJSONObject[i].value){ 
console.log("matching values") 
} 
} 

「値」は、単一の文字列アイテムまたは複数の文字列アイテムを含むことができる配列です。

私の理解は、上記のif文が配列を、決して真実ではないので、決して記録しない文字列と比較していることです。

値配列の値を比較するにはどうすればよいですか?

答えて

1
for (var lo = 0; lo < LocalJSONObject.length; ++lo) { 
    for (var va = 0; va < value.length; ++va) { 
    if (value[va] === LocalJSONObject[lo].value) { 
     console.log('Matching values:', value[va]); 
    } 
    } 
} 
+0

これは私に望ましい結果を与えています。 Underscore.JSにコードを少しきれいにする方法があるのだろうか? –

+0

@AlexanderMcComb、それは私のために十分な、2つのネストされたループ...私はアンダースコアについてはわかりませんが、私は気にしません、それは非常に一般的な構造です。重要なのは、インデックス名に注意を払っています...あなたが 'i'と' j'(多くの人がそうであるように)という名前を付けると、フォローするのが難しくなり、エラーが起こりやすくなります。 'lo'と' va'を使うことは目では簡単になり、変数名に近づくほど簡単になります。 – Rodrigo

+0

私はちょうど私がループのために入れ子にされたものが通常は悪い考えであるところを読んだと思う。しかし、私に実際に働く答えをくれてありがとう!心から感謝する! –

1

はい、あなたはmap方法は、配列を返すので、あなたの文は、文字列に配列を比較していると仮定で正しいです。

効率的に解決するには、Array.prototype.includes()メソッドを使用して結果を得ることができます。

for(i = 0; i < LocalJSONObject; i++;){ 
if(value.includes(LocalJSONObject[i].value)){ 
    console.log("matching values") 
} 
} 
+0

私はこれを試してみましょう、私が試していたものを含めなかったと思っていませんでした。お知らせいたします! –

+0

これはまったく同じであり、間違いなく速いかもしれません。 +1のために! –

関連する問題