我正在尝试从下面的代码返回一个对象,该对象的键值对为name:sparky,并返回该对象的整个元数据和stats数组。
我不想使用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"
}
]
}
答案 0 :(得分:1)
我想您可以执行以下操作:
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')
这段代码的基本作用是,遍历所有对象并检查名称是否闪烁,如果是,则将其断开。如果要返回所有与名称匹配的匹配项,则需要将它们全部添加到另一个数组中并返回它。
答案 1 :(得分:0)
您可以简单地使用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)