2017-09-23 113 views
0

我想抓取一個數組中的對象的內部鍵值,該數組本身就是數組中的一個對象。 這裏是什麼樣子:Javascript - 抓取嵌套在對象內的對象的內部值

var books = [ 
     { 
      "title": "title1", 
      "author": "author1", 
      "users": [ 
       { 
        "id": 1, 
        "name": "Isidro" 
       }, 
       { 
        "id": 4, 
        "name": "Jose Miguel" 
       }, 
       { 
        "id": 3, 
        "name": "Trinidad" 
       } 
      ] 
     }, 
     { 
      "title": "title2", 
      "author": "author2", 
      "users": [ 
       { 
        "id": 4, 
        "name": "Jose Miguel" 
       }, 
       { 
        "id": 5, 
        "name": "Beatriz" 
       }, 
       { 
        "id": 6, 
        "name": "Rosario" 
       } 
      ] 
     }, 

我所試圖做的,兩件事情: 第一: 當我在HTML點擊一個用戶名,我想匹配的名稱具有相同點擊所有對象中的用戶名 第二個: 顯示此用戶名所在的書的標題。 例如:當我點擊Jose Miguel時,我想查看他閱讀的2本書。

目前,我有這樣的:

var btnUser = document.querySelectorAll(".individualUsers"); 
     for (var i = 0; i < btnUser.length; i++) { 
      btnUser[i].addEventListener("click", function() { 
      var clickedUser = this.innerText 
      var userBooks = books 
       .filter(x => x.users.name.indexOf(clickedUser) > -1) 
       .map(x => ` <li>${x.title}</li> <li>${x.author}</li>`); 

      console.log(clickedUser); 
      }); 
     } 

我的問題是x.users.name.indexOf(clickedUser)沒有正在使用的用戶名。

回答

0

您需要的users陣列內搜索,以及,一個巧妙的方法是Array.some返回真正如果某些條件爲真這樣做。

const books = [{ 
 
    "title": "title1", 
 
    "author": "author1", 
 
    "users": [{ 
 
     "id": 1, 
 
     "name": "Isidro" 
 
     }, 
 
     { 
 
     "id": 4, 
 
     "name": "Jose Miguel" 
 
     }, 
 
     { 
 
     "id": 3, 
 
     "name": "Trinidad" 
 
     } 
 
    ] 
 
    }, 
 
    { 
 
    "title": "title2", 
 
    "author": "author2", 
 
    "users": [{ 
 
     "id": 4, 
 
     "name": "Jose Miguel" 
 
     }, 
 
     { 
 
     "id": 5, 
 
     "name": "Beatriz" 
 
     }, 
 
     { 
 
     "id": 6, 
 
     "name": "Rosario" 
 
     } 
 
    ] 
 
    } 
 
]; 
 

 
const clickedUser = 'Jose Miguel'; 
 

 
var userBooks = books 
 
    .filter(x => x.users.some(user => user.name.indexOf(clickedUser) > -1)); 
 

 
console.log(userBooks);