Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从对象数组中的嵌套数组中访问特定值?_Javascript_Json_Multidimensional Array - Fatal编程技术网

Javascript 如何从对象数组中的嵌套数组中访问特定值?

Javascript 如何从对象数组中的嵌套数组中访问特定值?,javascript,json,multidimensional-array,Javascript,Json,Multidimensional Array,我试图从对象数组中的嵌套数组中获取特定字段值。我假设我会使用map,但每次以这种方式使用它时,我都会在两个空对象中嵌套两个空数组。我知道这是错误的,我只是在展示我的思维过程 function getChildArray(item, index) { var x = [item.hobbies] return x } console.log(parentArray.map(getChildArray)) 这是我的文档结构的一个示例: [ { "id"

我试图从对象数组中的嵌套数组中获取特定字段值。我假设我会使用map,但每次以这种方式使用它时,我都会在两个空对象中嵌套两个空数组。我知道这是错误的,我只是在展示我的思维过程

function getChildArray(item, index) {
   var x = [item.hobbies]
      return x
}

console.log(parentArray.map(getChildArray))
这是我的文档结构的一个示例:

[  
   {  
      "id":12345678900,
      "name":"Jasmin",
      "age":27,
      "hobbies":[  
         {  
            "id":1221,
            "name":"hiking",
            "when":"anytime"
         },
         {  
            "id":9865,
            "name":"eating",
            "when":"all the time"
         }
      ]
   },
   {  
      "id":223456789001,
      "name":"Joe",
      "age":35,
      "hobbies":[  
         {  
            "id":989,
            "name":"gaming",
            "when":"anytime"
         },
         {  
            "id":2355,
            "name":"online gaming",
            "when":"all the time"
         }
      ]
   }
]
例如,我如何才能仅按姓名检索乔的爱好列表?

var joe = parentArray.find(function (item) {
    return item.name === 'Joe';
});

if (joe) {
    var joesHobbiesNames = joe.hobbies.map(function (hobbie) {
       return hobbie.name;
    });
}
或者在ES6中

var joe = parentArray.find((item) => item.name === 'Joe');

if (joe) {
    var joesHobbiesNames = joe.hobbies.map((hobbie) => hobbie.name);
}
或者在ES6中

var joe = parentArray.find((item) => item.name === 'Joe');

if (joe) {
    var joesHobbiesNames = joe.hobbies.map((hobbie) => hobbie.name);
}

返回具有所需属性和该属性值的项目的快速函数:

data = [{id:1,name:'Bob',hobbies:['a','b']},{id:2,name:'Alice',hobbies:['c','d']}];

function getPerson(property,value){
 for(var i=0;i<data.length;i++) if(data[i][property] == value) return data[i];
 return {};
}

返回具有所需属性和该属性值的项目的快速函数:

data = [{id:1,name:'Bob',hobbies:['a','b']},{id:2,name:'Alice',hobbies:['c','d']}];

function getPerson(property,value){
 for(var i=0;i<data.length;i++) if(data[i][property] == value) return data[i];
 return {};
}
由于ES5在所有浏览器中都不可用,并且您可能没有使用构建工具,因此这里提供了一个完整的ES5方法。它使用
过滤器
映射

var data=[{id:12345678900,姓名:'Jasmin',年龄:27岁,爱好:[{id:1221,'name':'hipping','when':'anytime'},{id:9865,'name':'eating','when':'all time'},{id:22345678901,姓名:'Joe',年龄:35,爱好:[{id:989,'name':
'gaming'、'when':'anytime'}、{'id':2355、'name':'online gaming'、'when':'all time'}];
函数getHobbiesByName(名称){
返回数据.过滤器(功能(人员){
返回(person.name==姓名);
})[0].爱好.map(函数(爱好){
return.name
})
}
log(getHobbiesByName('Joe'))
由于目前还不能在所有浏览器中使用,并且您可能没有使用构建工具,因此这里提供了一个完整的ES5方法。它使用
过滤器
映射

var data=[{id:12345678900,姓名:'Jasmin',年龄:27岁,爱好:[{id:1221,'name':'hipping','when':'anytime'},{id:9865,'name':'eating','when':'all time'},{id:22345678901,姓名:'Joe',年龄:35,爱好:[{id:989,'name':
'gaming'、'when':'anytime'}、{'id':2355、'name':'online gaming'、'when':'all time'}];
函数getHobbiesByName(名称){
返回数据.过滤器(功能(人员){
返回(person.name==姓名);
})[0].爱好.map(函数(爱好){
return.name
})
}

console.log(getHobbiesByName('Joe'))
JSON
中有语法错误,他忘了在“name:'Joe'”@developer033后面加逗号,另请参见
徒步旅行
吃东西
,逗号后跟
989
在线游戏
为人为错误道歉!现在修复了它。
JSON
出现语法错误他忘记了在“name:'Joe'”之后加逗号@developer033另请参见
rapping
eating
989
在线游戏
为人为错误道歉!现在已修复。它返回undefined-这只是一个测试,real use将调用检查该人员是否存在。它返回undefined-这只是一个测试,real use将调用检查该人员是否存在。我建议您使用
过滤器
方法,而不是
查找
,因为如果有多个对象具有name属性“Joe”,则
find
方法将只返回一个对象,而不是多个对象。该方法旨在使用
find
而不是
filter
。OP询问了JOE的爱好,而不是所有被称为JOE的人的所有爱好。Ei建议您使用
filter
方法,而不是
find
,因为如果有几个对象的名称属性为“JOE”,
find
方法将只返回一个对象,而不是多个对象。它旨在使用
find
而不是
filter
。OP询问的是乔的爱好,而不是所有叫乔的人的所有爱好