2016-11-02 12 views
1

この配列内のこれらの各オブジェクトのGenreプロパティを、value内のユーザに出力するタイトルプロパティに「リンク」しようとしています。他のプロパティを使用して配列内のオブジェクトのプロパティを検索

var movies= [{ 
    "Title": "Platoon", 
    "Genre": "War" 
}, { 
    "Title": "Pulp Fiction", 
    "Genre": "Crime" 
}]; 

var name = value; 
//console.log(name) outputs as title the user clicked on just fine 

var genre = ...["Genre"]; //no idea how to go about this 
//this should say genre = ["Genre"] in object where ["Title"] is same as value 

は、少なくとも「ジャンル」を検索することで要素を取得するために、IndexOfメソッドを試してみましたが、それは-1を出力します。

+1

なぜ配列を繰り返してタイトルを検索するだけですか? – Dhiraj

+0

['Array.prototype.find()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find) – Andreas

+5

これを5回読みましたが、私はまだそれを取得していないのですか? 2つの配列が必要ですか? – adeneo

答えて

1

あなたはArray#someを使用することができます。クリックされた要素の.innerHTMLは、オブジェクトのTitleプロパティの値に等しい場合

function findGenre(title) { 
 
    function search(a, i) { 
 
     if (a.Title === title) { 
 
      index = i; 
 
      return true; 
 
     } 
 
    } 
 
    
 
    var index; 
 
    if (movies.some(search)) { 
 
     return movies[index].Genre; 
 
    } 
 
} 
 

 
var movies= [{ Title: "Platoon", Genre: "War" }, { Title: "Pulp Fiction", Genre: "Crime" }]; 
 

 
console.log(findGenre('Platoon'));

+0

この回答は私のために働いていますが、オブジェクトの「Title」に空白がある場合は、プロパティが「Title」ではなく「Movie Title」だった場合、その変更をどのようにして '(a.Title == = title) 'も同様ですか? – TheNuttyStudent

+1

あなたはカッコ表記を使うことができます: 'a。['Movie Title'] === title'。 [プロパティアクセサー](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors)をご覧ください。 –

0

単純なforループで実行する必要があります。

0

あなたが行うことができます

var movies= [{ 
 
    "Title": "Platoon", 
 
    "Genre": "War" 
 
}, { 
 
    "Title": "Pulp Fiction", 
 
    "Genre": "Crime" 
 
}]; 
 

 
var name = 'Pulp Fiction'; 
 

 
var genre; 
 
for(var i=0; i< movies.length; i++) { 
 
    if (movies[i].Title === name) { 
 
    genre = movies[i].Genre; 
 
    break; 
 
    } 
 
} 
 

 
alert(genre);
var genre; 
for(var i=0; i< movies.length; i++) { 
    if (movies[i].Title === name) { 
    genre = movies[i].Genre; 
    break; // stop the loop assuming title is unique 
    } 
} 

var found = movies.filter(function(m) { 
    return m.Title === value 
    }); 

    if (found.length > 0) { 
    console.log(found[0].Genre); // or handle some way different if more than one match found 
    } 
0

あなたはチェックして値を取得するには、オブジェクトの構造化代入をfor..ofループを使用することができます

var movies= [{ 
 
    "Title": "Platoon", 
 
    "Genre": "War" 
 
}, { 
 
    "Title": "Pulp Fiction", 
 
    "Genre": "Crime" 
 
}]; 
 

 
var divs = document.querySelectorAll("div"); 
 
var [value, genre] = [null, null]; 
 
for (let el of divs) { 
 
    el.onclick = (e) => { 
 
    for (let props of movies) { 
 
     let {Title, Genre} = props; 
 
     if (Title === e.target.innerHTML) { 
 
     [value, genre] = [Title, Genre]; 
 
     console.log(`value:${value}, genre:${genre}`); 
 
     break; 
 
     } 
 
    } 
 
    } 
 
}
<div>Platoon</div> 
 
<div>Pulp Fiction</div>

関連する問題