2017-02-26 82 views
0
{ 
    "adult": false, 
    "budget": 17000000, 
    "crew": [ 
    { 
     "credit_id": {}, 
     "department": "Directing", 
     "id": 40223, 
     "job": "Director", 
     "name": "Joe Carnahan", 
     "profile_path": "/5YPrZ1JprLwtU4tn5DG0wqLjsAT.jpg" 
    }, 
    { 
     "credit_id": "55444d6bc3a368573b0008ba", 
     "department": "Writing", 
     "id": 40223, 
     "job": "Writer", 
     "name": "Joe Carnahan", 
     "profile_path": "/5YPrZ1JprLwtU4tn5DG0wqLjsAT.jpg" 
    }, 
    { 
     "credit_id": "52fe4482c3a36847f809a3ed", 
     "department": "Production", 
     "id": 2236, 
     "job": "Producer", 
     "name": "Tim Bevan", 
     "profile_path": "/f7o93O1KocuLwIrSa7KqyL1sWaT.jpg" 
    } 
} 

嗨! 这是tmdb php api的tmdb示例输出。 如何使用jquery获取董事姓名例如? 船员输出的顺序是随机的。在JSON对象中查找具体值

+0

可能重复[在JavaScript对象数组中查找对象的id](http://stackoverflow.com/questions/7364150/find-object-by-id-in-an-array-of- javascript-objects) – JJJ

+0

'''var object = [your object]; var directors = []; Directors = jQuery.grep(object.crew,function(element,i){ return element.name ==='Director'; });'''如果船员中有几个导演? – jedgard

回答

0

试试这个:

var aMovie = { 
 
    "adult": false, 
 
    "budget": 17000000, 
 
    "crew": [ 
 
    { 
 
     "credit_id": {}, 
 
     "department": "Directing", 
 
     "id": 40223, 
 
     "job": "Director", 
 
     "name": "Joe Carnahan", 
 
     "profile_path": "/5YPrZ1JprLwtU4tn5DG0wqLjsAT.jpg" 
 
    }, 
 
    { 
 
     "credit_id": "55444d6bc3a368573b0008ba", 
 
     "department": "Writing", 
 
     "id": 40223, 
 
     "job": "Writer", 
 
     "name": "Joe Carnahan", 
 
     "profile_path": "/5YPrZ1JprLwtU4tn5DG0wqLjsAT.jpg" 
 
    }, 
 
    { 
 
     "credit_id": "52fe4482c3a36847f809a3ed", 
 
     "department": "Production", 
 
     "id": 2236, 
 
     "job": "Producer", 
 
     "name": "Tim Bevan", 
 
     "profile_path": "/f7o93O1KocuLwIrSa7KqyL1sWaT.jpg" 
 
    }] 
 
}; 
 

 
var findDirector = function(aMovie){ 
 
    if(!aMovie.crew || aMovie.crew.length==0) return ""; 
 
    
 
    var director = aMovie.crew.find(function(member){ 
 
     return member.job.toLowerCase() == 'director'; 
 
    }); 
 
    return director.name; 
 
}; 
 

 
alert(findDirector(aMovie));

0

通常,当您在数组中搜索某些内容时,您希望遍历数组直到找到它。无论您使用jQuery还是普通JavaScript或其他任何具有数组的语言,这都是一样的。

对于你的情况,你想要搜索的属性job等于字符串"Director"的对象。

一旦找到它,您想要返回该对象的属性name

你可以用for循环做到这一点:

function findDirectorName(data) { 
    for (let i = 0; i < data.crew.length; i++) { 
    let crewMember = data.crew[i]; 
    if (crewMember.job === 'Director') { 
     return crewMember.name; 
    } 
    } 
} 

或许while循环:

function findDirectorName(data) { 
    let i = 0; 
    while (i < data.crew.length) { 
    let crewMember = data.crew[i]; 
    if (crewMember.job === 'Director') { 
     return crewMember.name; 
    } 
    i++; 
    } 
} 

使用内置的方法Array.prototype.find和箭头的功能,可以简化代码:

function findDirectorName(data) { 
    let director = data.crew.find(crewMember => crewMember.job === 'Director'); 
    return director ? director.name : undefined; 
} 
0

我喜欢使用some()

aMovie.crew.some(function(member) { 

    var job = member.job.toLowerCase(); 

    if(job == "director") return member; 

}