使用其他属性在数组中查找对象的属性

Find object's property inside array using other property

本文关键字:属性 查找 对象 其他 数组      更新时间:2023-09-26

我试图将该数组内每个对象中的Genre属性"链接"到value内输出给用户的title属性。

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方法至少通过搜索"Genre"来检索元素,但它输出-1

您可以使用Array#some

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'));

一个简单的for循环就可以做到。

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 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 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 
  }

您可以使用for..of循环,对象解构来获取值,通过检查所单击元素的.innerHTML是否等于对象的Title属性的值

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>