【发布时间】:2019-03-01 05:36:10
【问题描述】:
理想状态
我正在尝试从与特定值匹配的数组中返回一个对象,但我遇到了一些问题,因为该数组包含嵌套在另一个对象中的对象。我想返回整个对象,但我需要搜索的值在嵌套对象内。
例如,我试图根据 key:value 对 "name": "Kills" 的值返回整个对象
{
"metadata": {
"key": "kills",
"name": "Kills",
"isReversed": false
},
"value": 1364,
"displayValue": "1,364"
}
数组格式
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];
}
}
}
任何帮助将不胜感激!
【问题讨论】:
-
我认为它有点不同,因为我的数组包含嵌套对象。我还查看了您发布的链接的解决方案,Kamil 下面的代码要少得多。不过谢谢!
-
嵌套对象使用相同的代码,只是多加了一个点,而there are answers in that question则使用相同数量的代码。
-
@Heretic 有道理,但这仍然是一行代码,因此我认为它更简洁
标签: javascript arrays node.js express