【问题标题】:How to return object based on value in nested array? (Javascript)如何根据嵌套数组中的值返回对象? (Javascript)
【发布时间】:2016-07-03 04:56:29
【问题描述】:

我正在尝试返回嵌套数组中具有特定“id”的所有对象。在示例数据中,我想返回爱好 id 为 2(远足)的所有人员对象。

另一个问题解决了根据对象值查找数组中所有值的问题。

这个问题与上一个问题不同,因为我需要根据嵌套数组中的值返回所有对象。

[  
   {  
      "id":111222,
      "name":"Faye",
      "age":27,
      "hobbies":[  
         {  
            "id":2,
            "name":"hiking"
         },
         {  
            "id":3,
            "name":"eating"
         }
      ]
   },
   {  
      "id":223456789001,
      "name":"Bobby",
      "age":35,
      "hobbies":[  
         {  
            "id":2,
            "name":"hiking"
         },
         {  
            "id":4,
            "name":"online gaming"
         }
      ]
   }
]

【问题讨论】:

标签: javascript arrays json


【解决方案1】:
function hasHobby(person, hobbyId) {
  return person.hobbies.some(function(hobby) {
    return hobby.id === hobbyId;
  });
}

function filterByHobby(people, hobbyId) {
  return people.filter(function(person) {
    return hasHobby(person, hobbyId);
  });
}

如果你想使用新的很酷的 ES6 语法:

function filterByHobby(people, hobbyId) {
  return people.filter(
    person => person.hobbies.some(
      hobby => hobby.id === hobbyId
    )
  );
}

【讨论】:

    【解决方案2】:
    var arr = [  
       {  
          "id":111222,
          "name":"Faye",
          "age":27,
          "hobbies":[  
             {  
                "id":2,
                "name":"hiking"
             },
             {  
                "id":3,
                "name":"eating"
             }
          ]
       },
       {  
          "id":223456789001,
          "name":"Bobby",
          "age":35,
          "hobbies":[  
             {  
                "id":2,
                "name":"hiking"
             },
             {  
                "id":4,
                "name":"online gaming"
             }
          ]
       }
    ];
    
    arr.filter(function(obj) {
     var hobbies = obj.hobbies;
     var x = hobbies.filter(function(hob) {
         if (hob.id == "2") return true;
    });
    
    if (x.length > 0) return true;
    });
    

    【讨论】:

    • 您可以改用return hobbies.some
    【解决方案3】:

    试试这个,我想它可以解决你的问题:

    var arr = [{
      "id": 111222,
      "name": "Faye",
      "age": 27,
      "hobbies": [{
        "id": 2,
        "name": "hiking"
      }, {
        "id": 3,
        "name": "eating"
      }]
    }, {
      "id": 223456789001,
      "name": "Bobby",
      "age": 35,
      "hobbies": [{
        "id": 2,
        "name": "hiking"
      }, {
        "id": 4,
        "name": "online gaming"
      }]
    }];
    var x = arr.filter(function(el) {
      var rnel = el.hobbies.filter(function(nel) {
        return nel.id == 2;
      });
      return rnel.length > 0 ? true :false;
    });
    alert(x.length);

    【讨论】:

    • 运行良好的示例
    猜你喜欢
    • 2018-10-17
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多