假设我有这个对象数组。
const movieTitles = [
{
movieId: "4820",
movieName: "The Planet Of The Apes",
},
{
movieId: "0489",
movieName: "Interstellar",
},
{
movieId: "6238",
movieName: "The Dark Knight",
},
];
还有一个外部变量(与星际穿越电影中的对象相匹配)
const matchId = "0489";
我的问题是:
如何检查数组中包含
matchId
变量的正确对象?一旦确认 ID 相同,我如何获取该对象并使用它的属性(例如
movieName
)?如果变量动态更改,我如何根据对象数组检查变量的内容以检查它是否匹配?
感谢您提前提供的帮助!
最佳答案
如果每个 movieId
都是唯一的,那么您应该使用对象,而不是数组。像这样的东西更好:
const movieTitles = {
"4820": {
movieName: "The Planet Of The Apes",
},
"0489": {
movieName: "Interstellar",
},
"6238": {
movieName: "The Dark Knight",
},
};
注意:如果您无法更改格式movieTitles
,那么您可以从原始数组创建一个新对象,如下所示:
const movieTitles = [{
movieId: "4820",
movieName: "The Planet Of The Apes",
},
{
movieId: "0489",
movieName: "Interstellar",
},
{
movieId: "6238",
movieName: "The Dark Knight",
},
];
const movieObject = {};
for (const movie of movieTitles) {
const id = movie.movieId;
delete movie.movieId;
movieObject[id] = movie;
}
console.log(movieObject);
无论采用哪种方式,您都可以轻松选择您需要的电影
使用语法movies[movieId]
。像这样:
const movies = {
"4820": {
movieName: "The Planet Of The Apes",
},
"0489": {
movieName: "Interstellar",
},
"6238": {
movieName: "The Dark Knight",
},
};
// You can use a static value, like this:
console.log(movies["0489"])
// Or a variable like this:
const movieId = "4820"; // change this to any movie ID
console.log(movies[movieId])
这比循环数组要快得多,而且更惯用。使用对象的时间复杂度是一次性转换 O(n),之后每次访问的时间复杂度为 O(1)。相比之下,每次使用 .filter()
的复杂度都是 O(n)。
关于javascript - 从与已定义变量匹配的对象数组中的对象获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74215580/