Javascript 在2个数组之间查找唯一标识符
使用fetch API对端点执行fetch后,我的响应由包含两个数组的对象组成,看起来像这样Javascript 在2个数组之间查找唯一标识符,javascript,arrays,foreach,fetch,Javascript,Arrays,Foreach,Fetch,使用fetch API对端点执行fetch后,我的响应由包含两个数组的对象组成,看起来像这样 {游戏列表:数组(192),所有者列表:数组(4)} 每个阵列中都有一个唯一的标识符,两个阵列共享,例如node\u id 我需要一种方法检索所有游戏,一个唯一的所有者,所以在最后我将有一个4个所有者的名单,以及每个所有者有多少游戏(希望这是有意义的) 到目前为止,我得到的是以下信息: const getData = () => { fetch('./data.json') .then
{游戏列表:数组(192),所有者列表:数组(4)}
每个阵列中都有一个唯一的标识符,两个阵列共享,例如node\u id
我需要一种方法检索所有游戏,一个唯一的所有者,所以在最后我将有一个4个所有者的名单,以及每个所有者有多少游戏(希望这是有意义的)
到目前为止,我得到的是以下信息:
const getData = () => {
fetch('./data.json')
.then(res => res.json())
.then(data => {
console.log(data) // all data
const allGames = data.games_list
const allOwners = data.owner_list
// Get all id's for games_list and owner_list
const gameNodeIds = allGames.map(id => id.node_id)
const ownerNodeIds = allOwners.map(id => id.node_id)
})
.catch(err => console.error(`Error: ${err}`))
}
返回的数据示例:
{
"games_list": [
{
"game": "Overwatch",
"game_type": "Shooter",
"developers": "Blizzard",
"node_id": "123456778"
}
],
.....
"owners_list": [
{
"name": "John Doe",
"age": "25",
"Occupation": "gamer",
"node_id": "123456778"
}
]
}
这是我所能得到的,我真的需要一些帮助,所以所有的帮助都将被感谢 那么您必须找到您的特定节点id在所有游戏中存在的次数
var games_by_owner = {};
allOwners.forEach(function(ele, idx){
gameNoeIds.forEach(function(eleG, idxG){
if(typeof games_by_owner[idx] == 'undefined') {
games_by_owner[idx] = [];
}
if (ele.node_id == eleG.node_id) {
games_by_owner[idx].push(idxG);
}
});
});
因此,您将为每个所有者收集其游戏idxG的idx数组。因此您必须找到您的特定节点id在所有游戏中存在的次数
var games_by_owner = {};
allOwners.forEach(function(ele, idx){
gameNoeIds.forEach(function(eleG, idxG){
if(typeof games_by_owner[idx] == 'undefined') {
games_by_owner[idx] = [];
}
if (ele.node_id == eleG.node_id) {
games_by_owner[idx].push(idxG);
}
});
});
因此,您将为每位游戏所有者收集其游戏idxG的idx数组。使用对象或地图以及公共键值作为属性来创建一个
counts
对象
以下假设某些游戏的所有者列表中可能没有所有者,您只需要现有所有者的计数
let数据={
“游戏列表”:[
{
“游戏”:“守望”,
“游戏类型”:“射手”,
“开发者”:“暴雪”,
“节点id”:“123456778”
}
],
“业主名单”:[
{
“姓名”:“约翰·多伊”,
“年龄”:“25岁”,
“职业”:“玩家”,
“节点id”:“123456778”
}
]
}
让ownerCounts=data.owners\u list.reduce((a,c)=>(a[c.node\u id]=0,a),{});
data.games_list.forEach(g=>g.node_id在ownerCounts&&ownerCounts[g.node_id]++);
console.log(ownerCounts)
使用对象或映射以及公共键值作为属性来创建计数
对象
以下假设某些游戏的所有者列表中可能没有所有者,您只需要现有所有者的计数
let数据={
“游戏列表”:[
{
“游戏”:“守望”,
“游戏类型”:“射手”,
“开发者”:“暴雪”,
“节点id”:“123456778”
}
],
“业主名单”:[
{
“姓名”:“约翰·多伊”,
“年龄”:“25岁”,
“职业”:“玩家”,
“节点id”:“123456778”
}
]
}
让ownerCounts=data.owners\u list.reduce((a,c)=>(a[c.node\u id]=0,a),{});
data.games_list.forEach(g=>g.node_id在ownerCounts&&ownerCounts[g.node_id]++);
console.log(ownerCounts)
您可以组合map()
和filter()
以返回所需结构的所需结果
请参阅代码片段
var数据={
“游戏列表”:[
{
“游戏”:“游戏1”,
“游戏类型”:“射手”,
“开发者”:“暴雪”,
节点id:“1”
},
{
“游戏”:“游戏2”,
“游戏类型”:“射手”,
“开发者”:“暴雪”,
节点id:“1”
},
{
“游戏”:“游戏3”,
“游戏类型”:“射手”,
“开发者”:“暴雪”,
节点id:“2”
}
],
“业主名单”:[
{
“名称”:“所有者1”,
“年龄”:“25岁”,
“职业”:“玩家”,
节点id:“1”
},
{
“名称”:“所有者2”,
“年龄”:“25岁”,
“职业”:“玩家”,
节点id:“2”
},
{
“名称”:“所有者3”,
“年龄”:“25岁”,
“职业”:“玩家”,
节点id:“3”
}
]
}
const allGames=data.games\u列表;
const allOwners=data.owners\u list;
var result=allOwners.map(所有者=>
({owner:owner.name,
games:allGames.filter(game=>game.node\u id===owner.node\u id
).长度
})
)
控制台日志(结果)
您可以组合map()
和filter()
以返回所需结构的所需结果
请参阅代码片段
var数据={
“游戏列表”:[
{
“游戏”:“游戏1”,
“游戏类型”:“射手”,
“开发者”:“暴雪”,
节点id:“1”
},
{
“游戏”:“游戏2”,
“游戏类型”:“射手”,
“开发者”:“暴雪”,
节点id:“1”
},
{
“游戏”:“游戏3”,
“游戏类型”:“射手”,
“开发者”:“暴雪”,
节点id:“2”
}
],
“业主名单”:[
{
“名称”:“所有者1”,
“年龄”:“25岁”,
“职业”:“玩家”,
节点id:“1”
},
{
“名称”:“所有者2”,
“年龄”:“25岁”,
“职业”:“玩家”,
节点id:“2”
},
{
“名称”:“所有者3”,
“年龄”:“25岁”,
“职业”:“玩家”,
节点id:“3”
}
]
}
const allGames=data.games\u列表;
const allOwners=data.owners\u list;
var result=allOwners.map(所有者=>
({owner:owner.name,
games:allGames.filter(game=>game.node\u id===owner.node\u id
).长度
})
)
控制台日志(结果)
你能用几个例子替换Array(xx)
吗?我更新了@GetOffMyLawn我的描述你能用几个例子替换Array(xx)
吗?我更新了@GetOffMyLawn我的描述