Return 嵌套在另一个数组中的数组中具有特定 key:value 对的对象 - Javascript
Return object with specific key:value pair in an array nested in another array - Javascript
我正在尝试 return 下面代码中的一个对象,该对象具有 name:sparky 的键值对和 return 该对象的整个元数据和统计数据数组。
我不想使用 Object.values(objectArray)[0],因为此数据来自 API,我希望数组中的对象位置将来会发生变化。
我试过 objectArray.find 但我不知道如何使用它来查找位于另一个数组内的数组的值。 name 的值将始终是唯一的,实际的 objectArray 中有更多的对象。
不胜感激!
代码
objectArray = [
{
"metadata": [
{
"key": '1',
"name": "sparky"
}
],
"stats": [
{
"statsFieldOne": "wins"
},
{
"statsFieldTwo": "kills"
}
]
},
{
"metadata": [
{
"key": '1',
"name": "abby"
}
],
"stats": [
{
"statsFieldOne": "wins"
},
{
"statsFieldTwo": "kills"
}
]
}
]
想要的结果
{
"metadata": [
{
"key": '1',
"name": "sparky"
}
],
"stats": [
{
"statsFieldOne": "wins"
},
{
"statsFieldTwo": "kills"
}
]
}
我猜你可以做以下事情:
function getObjectForName(key, name) {
var filteredMetadata = [];
for(var i=0; i< objectArray.length; i++) {
filteredMetadata = objectArray[i].metadata.filter((val) => val[key] === name)
if(filteredMetadata.length) {
return objectArray[i];
}
}
}
getObjectForName('name', 'sparky')
这段代码基本上做的是,遍历所有对象并检查名称是否有火花,如果是就打破它。如果你想 return 所有出现匹配的名字,你需要将它们全部添加到另一个数组并 return 它。
您可以简单地使用 Reduce
let objectArray = [{"metadata":[{"key":'1',"name":"sparky"}],"stats":[{"statsFieldOne":"wins"},{"statsFieldTwo":"kills"}]},{"metadata":[{"key":'1',"name":"abby"}],"stats":[{"statsFieldOne":"wins"},{"statsFieldTwo":"kills"}]}]
let op = objectArray.reduce(( op,{metadata,stats} ) =>{
let found = metadata.find(({name})=>name==='sparky')
if(found){
op.push({metadata:found,stats})
}
return op
},[])
console.log(op)
我正在尝试 return 下面代码中的一个对象,该对象具有 name:sparky 的键值对和 return 该对象的整个元数据和统计数据数组。
我不想使用 Object.values(objectArray)[0],因为此数据来自 API,我希望数组中的对象位置将来会发生变化。
我试过 objectArray.find 但我不知道如何使用它来查找位于另一个数组内的数组的值。 name 的值将始终是唯一的,实际的 objectArray 中有更多的对象。
不胜感激!
代码
objectArray = [
{
"metadata": [
{
"key": '1',
"name": "sparky"
}
],
"stats": [
{
"statsFieldOne": "wins"
},
{
"statsFieldTwo": "kills"
}
]
},
{
"metadata": [
{
"key": '1',
"name": "abby"
}
],
"stats": [
{
"statsFieldOne": "wins"
},
{
"statsFieldTwo": "kills"
}
]
}
]
想要的结果
{
"metadata": [
{
"key": '1',
"name": "sparky"
}
],
"stats": [
{
"statsFieldOne": "wins"
},
{
"statsFieldTwo": "kills"
}
]
}
我猜你可以做以下事情:
function getObjectForName(key, name) {
var filteredMetadata = [];
for(var i=0; i< objectArray.length; i++) {
filteredMetadata = objectArray[i].metadata.filter((val) => val[key] === name)
if(filteredMetadata.length) {
return objectArray[i];
}
}
}
getObjectForName('name', 'sparky')
这段代码基本上做的是,遍历所有对象并检查名称是否有火花,如果是就打破它。如果你想 return 所有出现匹配的名字,你需要将它们全部添加到另一个数组并 return 它。
您可以简单地使用 Reduce
let objectArray = [{"metadata":[{"key":'1',"name":"sparky"}],"stats":[{"statsFieldOne":"wins"},{"statsFieldTwo":"kills"}]},{"metadata":[{"key":'1',"name":"abby"}],"stats":[{"statsFieldOne":"wins"},{"statsFieldTwo":"kills"}]}]
let op = objectArray.reduce(( op,{metadata,stats} ) =>{
let found = metadata.find(({name})=>name==='sparky')
if(found){
op.push({metadata:found,stats})
}
return op
},[])
console.log(op)