javascript过滤器json中数据相等的值



我有以下json对象。我试图通过数据过滤并获得socketId值,其中名称等于bq89 ' ' ' name: "bq89">

const rooms = {
"room1": {
"socketId1":{
id: "123",
name: "the person name 1"
},
"socketId2":{
id: "bq89",
name: "the person name 2"
}
},
"room2": {
"socketId11":{
id: "jkl",
name: "room 2 name 1"
},
"socketId22":{
id: "lpo",
name: "room 2 name 2"
}
}
}
const socketId = rooms['room1'].filter(e=> {return e.name === 'bq89'})
console.log(socketId)
// desired output would be: socketId2

使用Object.entries将room1转换为条目数组允许您使用数组方法,如Array.findArray.filter。如果您想要"过滤"name等于bq89的socketId值;(单数)因此我假定由"filter"你的意思是"找到"。

const rooms = {
"room1": {
"socketId1": {
id: "123",
name: "the person name 1"
},
"socketId2": {
id: "bq89",
name: "bq89"
}
},
"room2": {
"socketId11": {
id: "jkl",
name: "room 2 name 1"
},
"socketId22": {
id: "lpo",
name: "room 2 name 2"
}
}
}
function getSocketId(name) {
return Object.values(rooms)
.flatMap(v => Object.entries(v))
.find(([key, value]) => value.name === name)[0];
}
// desired output would be: socketId2
console.log(getSocketId("bq89"));

更一般地说,您从API接收到的数据是破碎的,并且是非常规的格式。如果你可以访问API,我建议你改变数据的结构方式。

最新更新