Javascript - 抓取嵌套在对象中的对象内部的值

时间:2017-09-23 10:29:08

标签: javascript arrays json object ecmascript-6

我试图在数组中获取对象内部的键值,该数组本身就是数组中的对象。 这是它的样子:

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)没有访问用户名。

1 个答案:

答案 0 :(得分:0)

你需要在users数组中进行搜索,如果某些条件为真,那么返回 true Array.some就是一个简洁的方法。< / p>

&#13;
&#13;
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);
&#13;
&#13;
&#13;