2016-09-23 13 views
0

私は異なる役割を持つオブジェクトを持っており、特定の色を含む配列を持っています。JavaScript配列内の文字列がオブジェクト内にあるかどうかを調べる

私がしたいことは、roles.nameにcolors配列のいずれかの文字列が含まれているかどうかを確認することです。私は、次のようなさまざまなアプローチ、試してみた:

var colors = ["blue", "yellow", "brown", "red", "green", "pink", "purple"]; 
var roles = [{"name": "asd"}, 
      {"name": "blue"}, 
      {"name": "yellow"}, 
      {"name": "brown"}, 
      {"name": "red"}, 
      {"name": "green"}, 
      {"name": "pink"}, 
      {"name": "purple"}, 
      {"name": "fgh"}, 
      {"name": "jkl"}]; 
for (var i = 0; i < roles.length; i++) { 
    if (roles[i].name.indexOf(colors)) { 
    console.log(roles[i].name); 
    } 
} 

そして

var colors = ["blue", "yellow", "brown", "red", "green", "pink", "purple"]; 
var roles = [{"name": "asd"}, 
      {"name": "blue"}, 
      {"name": "yellow"}, 
      {"name": "brown"}, 
      {"name": "red"}, 
      {"name": "green"}, 
      {"name": "pink"}, 
      {"name": "purple"}, 
      {"name": "fgh"}, 
      {"name": "jkl"}]; 
roles.forEach(role => { 
    if (role.name.indexOf(colors)) { 
    console.log(role.name); 
    } 
}); 

をしかし、コードの両方で、その結果は、役割の完全なリストです。

予想される結果として、コンソールにすべての色が記録されます。私が得るのは、コンソールに記録されているすべての役割です。

+0

あなたが使用することができます[ 'アレイ#find'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)と[' Array#findIndex'](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex)もあります。 – Xotic750

+0

あなたのオブジェクトには同じ名前のすべてのキーがありますが、文字通り 'name'と呼ばれていますので、前の文字を上書きしてしまいます。キーと値。 – adeneo

+0

配列のようなオブジェクトを扱うときに、どのようにすべてのロールが記録されますか? –

答えて

3

あなたは後方にindexOfを使用しています。 array.indexOf(valueToSearchFor)である必要がありますが、あなたはvalueToSearchFor.indexOf(array)です。また、indexOfは、ブール値ではなく、インデックスを返します。要素が見つかったかどうかをテストするには、それを-1と比較する必要があります。

var colors = ["blue", "yellow", "brown", "red", "green", "pink", "purple"]; 
 
var roles = [{"name": "asd"}, 
 
     {"name": "blue"}, 
 
     {"name": "yellow"}, 
 
     {"name": "brown"}, 
 
     {"name": "red"}, 
 
     {"name": "green"}, 
 
     {"name": "pink"}, 
 
     {"name": "purple"}, 
 
     {"name": "fgh"}, 
 
     {"name": "jkl"}]; 
 
for (var i = 0; i < roles.length; i++) { 
 
    if (colors.indexOf(roles[i].name) != -1) { 
 
    console.log(roles[i].name); 
 
    } 
 
}

+0

ああ、私は実際にはこのアプローチを試みましたが、!= -1を除いてでした。それがブール値を返さないことを知らなかった。ありがとうございました。 – ibab

+0

そのような間違いの理由はありません。私は 'indexOf'を使って全てのチュートリアルを説明しています。 – Barmar

0

var colors = ["blue", "yellow", "brown", "red", "green", "pink", "purple"]; 
 
var roles = [{"name": "asd"}, {"name": "blue"}, {"name": "yellow"}, {"name": "brown"},{"name": "red"}, {"name": "green"}, {"name": "pink"}, {"name": "purple"}, {"name": "fgh"}, {"name": "jkl"}]; 
 
var discovered = []; 
 
for (var i = 0; i < roles.length; i++) { 
 
    for (var j=0 ; j < colors.length ; j++){ 
 
    if (roles[i].name == colors[j]) { 
 
     discovered.push(roles[i]); 
 
    } 
 
    } 
 
} 
 

 
console.log(discovered);

0

あなたの役割のみオブジェクトです。このフォーマットを推奨します。

let colors = [ 
    { 
     "name": "blue" 
    }, 
    { 
     "name": "yellow" 
    }, 
    { 
     "name": "brown" 
    }, 
    { 
     "name": "red" 
    }, 
    { 
     "name": "green" 
    }, 
    { 
     "name": "pink" 
    }, 
    { 
     "name": "purple" 
    } 
] 

、それはindexOfを呼び出すときは、役割や色を切り替える.map()

colors.map(function (color) { 
    console.log(color.name) 
}) 
0

を使用して、それぞれの色です。 'indexOf 'は'ブール値 'しかし整数を返しません。0を返すと、間違った結果を引き起こすと' false 'と評価されます。

ES6で
roles.forEach(function (role) { 
    if (colors.indexOf(role.name) >= 0) { 
    console.log(role.name); 
    } 
}); 
関連する問題