Javascript 从数组中返回与我需要返回的对象中嵌套的对象的key:value对匹配的对象

Javascript 从数组中返回与我需要返回的对象中嵌套的对象的key:value对匹配的对象,javascript,arrays,node.js,express,Javascript,Arrays,Node.js,Express,所需状态 我试图从与特定值匹配的数组返回一个对象,但遇到了一些问题,因为该数组包含嵌套在另一个对象中的对象。我想返回整个对象,但需要搜索的值位于嵌套对象内 例如,我试图根据key:value对“name”:“Kills”的值返回整个对象 数组格式 let stats = [ { "metadata": { "key": "kills", "name": "Kil

所需状态

我试图从与特定值匹配的数组返回一个对象,但遇到了一些问题,因为该数组包含嵌套在另一个对象中的对象。我想返回整个对象,但需要搜索的值位于嵌套对象内

例如,我试图根据key:value对“name”:“Kills”的值返回整个对象

数组格式

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;ival[killsKey]==value) console.log('filteredStats before if','filteredStats'); if(过滤测试长度){ log('filteredStats[i]',filteredStats[i]); 返回过滤器测试[i]; } } } 任何帮助都将不胜感激

试试看

stats.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");