2017-09-23 116 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);