Javascript 从数组中返回与我需要返回的对象中嵌套的对象的key:value对匹配的对象
所需状态 我试图从与特定值匹配的数组返回一个对象,但遇到了一些问题,因为该数组包含嵌套在另一个对象中的对象。我想返回整个对象,但需要搜索的值位于嵌套对象内 例如,我试图根据key:value对“name”:“Kills”的值返回整个对象 数组格式Javascript 从数组中返回与我需要返回的对象中嵌套的对象的key:value对匹配的对象,javascript,arrays,node.js,express,Javascript,Arrays,Node.js,Express,所需状态 我试图从与特定值匹配的数组返回一个对象,但遇到了一些问题,因为该数组包含嵌套在另一个对象中的对象。我想返回整个对象,但需要搜索的值位于嵌套对象内 例如,我试图根据key:value对“name”:“Kills”的值返回整个对象 数组格式 let stats = [ { "metadata": { "key": "kills", "name": "Kil
let stats = [
{
"metadata": {
"key": "kills",
"name": "Kills",
"isReversed": false
},
"value": 1364,
"displayValue": "1,364"
},
{
"metadata": {
"key": "score",
"name": "Score",
"isReversed": false
},
"value": 413743,
"displayValue": "413,743"
},
{
"metadata": {
"key": "matchesPlayed",
"name": "Matches Played",
"isReversed": false
},
"value": 2160,
"displayValue": "2,160"
}
]
当前不工作的代码
我不打算使用这种结构的代码,任何可行的解决方案对我来说都很好,但我需要它成为一个可以重用的功能
function getStatsFields(value, statsSegment){
console.log('getStatsFields ran', statsSegment.stats[0].metadata.name);
console.log('statsSegment.stats.length', statsSegment.stats.length);
var filteredStats = []
for(var i=0; i < statsSegment.stats.length; ++i){
const killsKey = Object.keys(statsSegment.stats[i].metadata.name)
console.log('killsKey', killsKey);
filteredStats = statsSegment.stats.filter(val => val[killsKey] === value)
console.log('filteredStats before if', filteredStats);
if(filteredStats.length){
console.log('filteredStats[i]', filteredStats[i]);
return filteredStats[i];
}
}
}
函数getStatsFields(值,statsSegment){
console.log('getStatsFields run',statsSegment.stats[0].metadata.name);
log('statsSegment.stats.length',statsSegment.stats.length);
变量filteredStats=[]
对于(变量i=0;istats.find(x=> x.metadata.name=="Kills");
let stats=[
{
“元数据”:{
“钥匙”:“杀死”,
“名字”:“杀死”,
“isReversed”:错误
},
“价值”:1364,
“显示值”:“1364”
},
{
“元数据”:{
“关键”:“得分”,
“姓名”:“分数”,
“isReversed”:错误
},
“价值”:413743,
“显示值”:“413743”
},
{
“元数据”:{
“密钥”:“匹配显示”,
“名称”:“已进行的比赛”,
“isReversed”:错误
},
“价值”:2160,
“显示值”:“2160”
}
]
让r=stats.find(x=>x.metadata.name==“Kills”);
控制台日志(r)代码>试试看
let stats=[
{
“元数据”:{
“钥匙”:“杀死”,
“名字”:“杀死”,
“isReversed”:错误
},
“价值”:1364,
“显示值”:“1364”
},
{
“元数据”:{
“关键”:“得分”,
“姓名”:“分数”,
“isReversed”:错误
},
“价值”:413743,
“显示值”:“413743”
},
{
“元数据”:{
“密钥”:“匹配显示”,
“名称”:“已进行的比赛”,
“isReversed”:错误
},
“价值”:2160,
“显示值”:“2160”
}
]
让r=stats.find(x=>x.metadata.name==“Kills”);
控制台日志(r)
如果您正在寻找通过元数据(键
,值
)对进行筛选的方法,那么下一个方法可能会帮助您:
const stats=[
{
“元数据”:{
“钥匙”:“杀死”,
“名字”:“杀死”,
“isReversed”:错误
},
“价值”:1364,
“显示值”:“1364”
},
{
“元数据”:{
“关键”:“得分”,
“姓名”:“分数”,
“isReversed”:错误
},
“价值”:413743,
“显示值”:“413743”
},
{
“元数据”:{
“密钥”:“匹配显示”,
“名称”:“已进行的比赛”,
“isReversed”:错误
},
“价值”:2160,
“显示值”:“2160”
}
];
常量过滤器bymatakeyval=(arr,元键,v)=>
{
返回arr.filter(({metadata})=>metadata[metakey]==v);
}
console.log(
“按[名称,终止]:”筛选,
filterByMetaKeyVal(统计数据,“名称”,“杀死”)
);
console.log(
“按[key,matchesPlayed]筛选:”,
filterByMetaKeyVal(统计信息、“关键”、“匹配显示”)
);
console.log(
“按[isReversed,true]进行筛选:”,
filterByMetaKeyVal(统计数据,“isReversed”,真)
);代码>
.as控制台{背景色:黑色!重要;颜色:石灰;}
。作为控制台包装器{max height:100%!important;top:0;}
如果您正在寻找一种通过元数据(键
,值
)对进行筛选的方法,下一个方法可能会帮助您:
const stats=[
{
“元数据”:{
“钥匙”:“杀死”,
“名字”:“杀死”,
“isReversed”:错误
},
“价值”:1364,
“显示值”:“1364”
},
{
“元数据”:{
“关键”:“得分”,
“姓名”:“分数”,
“isReversed”:错误
},
“价值”:413743,
“显示值”:“413743”
},
{
“元数据”:{
“密钥”:“匹配显示”,
“名称”:“已进行的比赛”,
“isReversed”:错误
},
“价值”:2160,
“显示值”:“2160”
}
];
常量过滤器bymatakeyval=(arr,元键,v)=>
{
返回arr.filter(({metadata})=>metadata[metakey]==v);
}
console.log(
“按[名称,终止]:”筛选,
filterByMetaKeyVal(统计数据,“名称”,“杀死”)
);
console.log(
“按[key,matchesPlayed]筛选:”,
filterByMetaKeyVal(统计信息、“关键”、“匹配显示”)
);
console.log(
“按[isReversed,true]进行筛选:”,
filterByMetaKeyVal(统计数据,“isReversed”,真)
);代码>
.as控制台{背景色:黑色!重要;颜色:石灰;}
.作为控制台包装{max height:100%!important;top:0;}
的可能副本,我认为它有点不同,因为我的数组包含嵌套对象。我还看了一下你发布的链接的解决方案,Kamil下面的代码要少得多。谢谢你!嵌套对象使用相同的代码,只需添加一个额外的点,然后
stats.find(x=> x.metadata.name=="Kills");