Javascript 如何从对象数组中的嵌套数组中访问特定值?
我试图从对象数组中的嵌套数组中获取特定字段值。我假设我会使用map,但每次以这种方式使用它时,我都会在两个空对象中嵌套两个空数组。我知道这是错误的,我只是在展示我的思维过程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"
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询问的是乔的爱好,而不是所有叫乔的人的所有爱好