Javascript 基于嵌套数组中匹配的键值获取对象
我有一个电影提要,试图检索具有特定键值的对象的“name”值。以下是回应:Javascript 基于嵌套数组中匹配的键值获取对象,javascript,json,api,jsonp,Javascript,Json,Api,Jsonp,我有一个电影提要,试图检索具有特定键值的对象的“name”值。以下是回应: { genres: [ { id: 18, name: "Drama" }, ], homepage: "http://www.therewillbeblood.com/", id: 7345, imdb_id: "tt0469494", release_date: "2007-12-26",
{
genres: [
{
id: 18,
name: "Drama"
},
],
homepage: "http://www.therewillbeblood.com/",
id: 7345,
imdb_id: "tt0469494",
release_date: "2007-12-26",
crew: [
{
id: 4762,
name: "Paul Thomas Anderson",
department: "Writing",
job: "Screenplay",
profile_path: "/6lDE5N6lQUvAbKBRazn2Q0mRk44.jpg"
},
{
id: 52563,
name: "Upton Sinclair",
department: "Writing",
job: "Novel",
profile_path: null
},
{
id: 2950,
name: "Robert Elswit",
department: "Camera",
job: "Director of Photography",
profile_path: null
},
{
id: 1809,
name: "Dylan Tichenor",
department: "Editing",
job: "Editor",
profile_path: null
},
{
id: 4762,
name: "Paul Thomas Anderson",
department: "Directing",
job: "Director",
profile_path: "/6lDE5N6lQUvAbKBRazn2Q0mRk44.jpg"
},
{
id: 4772,
name: "Cassandra Kulukundis",
department: "Production",
job: "Casting",
profile_path: null
}
]
}
所以我试图得到一个具有“导演”这个“工作”关键值的对象,这就是保罗·托马斯·安德森
这是我的javascript,我根据release_date的值设置year变量。只是想弄清楚如何设置控制器变量:
<script type="text/javascript">
$(document).ready(function() {
var url = 'http://api.themoviedb.org/3/movie/';
imdb_id = 'tt0102685';
key = '?api_key=XXXXXXXXXXXX';
append = '&append_to_response=credits';
$.ajax({
type: 'GET',
url: url + imdb_id + key + append,
dataType: 'jsonp',
success: function(data) {
var $year = data.release_date.substring(0, 4);
$('#year').html($year);
},
});
});
</script>
$(文档).ready(函数(){
var url='1〕http://api.themoviedb.org/3/movie/';
imdb_id='tt0102685';
密钥='?api_密钥=XXXXXXXXXX';
append='&将_追加到_response=credits';
$.ajax({
键入:“GET”,
url:url+imdb\u id+key+append,
数据类型:“jsonp”,
成功:功能(数据){
var$year=数据发布日期子字符串(0,4);
$('year').html($year);
},
});
});
任何帮助都将不胜感激!花了将近两天的时间试图解决这个问题,但都无济于事。如果您使用的是现代浏览器,您可以使用以下功能:
var name = data.crew.filter(function(e){
return (e.job=="Director") ? true:false;
})[0].name;
JS小提琴:
错误处理示例
function getDirectorName(crew){
var name = "";
try{
name = json.crew.filter(function(e){
return e.job=="Director"
})[0].name;
}catch(err){
name = "No Director";
}
return name;
}
//calling the method
alert(getDirectorName(data.crew));
如果您使用的是现代浏览器,则可以使用以下功能:
var name = data.crew.filter(function(e){
return (e.job=="Director") ? true:false;
})[0].name;
JS小提琴:
错误处理示例
function getDirectorName(crew){
var name = "";
try{
name = json.crew.filter(function(e){
return e.job=="Director"
})[0].name;
}catch(err){
name = "No Director";
}
return name;
}
//calling the method
alert(getDirectorName(data.crew));
如果您使用的是现代浏览器,则可以使用以下功能:
var name = data.crew.filter(function(e){
return (e.job=="Director") ? true:false;
})[0].name;
JS小提琴:
错误处理示例
function getDirectorName(crew){
var name = "";
try{
name = json.crew.filter(function(e){
return e.job=="Director"
})[0].name;
}catch(err){
name = "No Director";
}
return name;
}
//calling the method
alert(getDirectorName(data.crew));
如果您使用的是现代浏览器,则可以使用以下功能:
var name = data.crew.filter(function(e){
return (e.job=="Director") ? true:false;
})[0].name;
JS小提琴:
错误处理示例
function getDirectorName(crew){
var name = "";
try{
name = json.crew.filter(function(e){
return e.job=="Director"
})[0].name;
}catch(err){
name = "No Director";
}
return name;
}
//calling the method
alert(getDirectorName(data.crew));
对于稍微“不同”的方法,请先按作业排序。例如
data.crew.sort(function(a,b) {
return a.job == 'Director' ? -1 : 1;
});
console.log(data.crew[0].name); // => name of Director
注意:我不一定赞同这个解决方案。排序不是最有效的方法。而且它还有副作用(改变data.crew
数组的顺序,这可能是不可取的)。但这是一种“可爱”的解决方案,所以我想我会把它扔出去 对于稍微“不同”的方法,请先按作业排序。例如
data.crew.sort(function(a,b) {
return a.job == 'Director' ? -1 : 1;
});
console.log(data.crew[0].name); // => name of Director
注意:我不一定赞同这个解决方案。排序不是最有效的方法。而且它还有副作用(改变data.crew
数组的顺序,这可能是不可取的)。但这是一种“可爱”的解决方案,所以我想我会把它扔出去 对于稍微“不同”的方法,请先按作业排序。例如
data.crew.sort(function(a,b) {
return a.job == 'Director' ? -1 : 1;
});
console.log(data.crew[0].name); // => name of Director
注意:我不一定赞同这个解决方案。排序不是最有效的方法。而且它还有副作用(改变data.crew
数组的顺序,这可能是不可取的)。但这是一种“可爱”的解决方案,所以我想我会把它扔出去 对于稍微“不同”的方法,请先按作业排序。例如
data.crew.sort(function(a,b) {
return a.job == 'Director' ? -1 : 1;
});
console.log(data.crew[0].name); // => name of Director
注意:我不一定赞同这个解决方案。排序不是最有效的方法。而且它还有副作用(改变
data.crew
数组的顺序,这可能是不可取的)。但这是一种“可爱”的解决方案,所以我想我会把它扔出去 可以工作,但对于返回的数组可能为空的情况,可能应该有错误处理代码。此外(e.job==“Director”)
表达式已经生成布尔值。无需使用三元运算符强制转换为true:false。所以只要返回e.job=='Director'
@broofa要查看错误处理,希望听听您的建议。为什么要尝试catch而不是简单地检查返回的数组长度?我不喜欢这里的try-catch有两个原因:1)它可以掩盖调用代码可能关心的意外错误,例如,e
未定义;2)try-catch性能比if()…
差几个数量级。请参阅(“表”视图),我还建议返回null而不是“No Director”,因为这是(imho)一个语义上更正确的值。可以工作,但对于返回的数组可能为空的情况,应该有错误处理代码。另外(e.job==“Director”)
表达式已经产生了布尔值。无需使用三元运算符强制转换为true:false。所以只要返回e.job=='Director'
@broofa要查看错误处理,希望听听您的建议。为什么要尝试catch而不是简单地检查返回的数组长度?我不喜欢这里的try-catch有两个原因:1)它可以掩盖调用代码可能关心的意外错误,例如,e
未定义;2)try-catch性能比if()…
差几个数量级。请参阅(“表”视图),我还建议返回null而不是“No Director”,因为这是(imho)一个语义上更正确的值。可以工作,但对于返回的数组可能为空的情况,应该有错误处理代码。另外(e.job==“Director”)
表达式已经产生了布尔值。无需使用三元运算符强制转换为true:false。所以只要返回e.job=='Director'
@broofa要查看错误处理,希望听听您的建议。为什么要尝试catch而不是简单地检查返回的数组长度?我不喜欢这里的try-catch有两个原因:1)它可以掩盖调用代码可能关心的意外错误,例如,e
未定义;2)try-catch性能比if()…
差几个数量级。请参阅(“表”视图),我还建议返回null而不是“No Director”,因为这是(imho)一个语义上更正确的值。可以工作,但对于返回的数组可能为空的情况,应该有错误处理代码。另外(e.job==“Director”)
表达式已经产生了布尔值。无需使用三元运算符强制转换为true:false。所以只要返回e.job=='Director'
@broofa要查看错误处理,希望听听您的建议。为什么要尝试catch而不是简单地检查返回的数组长度?我不喜欢这里的try-catch,原因有两个:1)它会模糊联合国