当我的对象数组具有匹配值时,为什么我的 Objects.values() 返回 false?
Why is my Objects.values() returning false when my array of Objects has a matching value?
我有一个变量,memberId
,它有一个唯一的值。我正在尝试对来自 firebase 的对象数组使用 Object.values()
,对数组中的唯一 firebase id 使用 return true。这是我的 memberArr
的 console.log,它在此 onValue
调用之前定义为 let memberArr= [];
[
{
"-N0IZXQkPiHD9yfwi-M1": {
"member_id": "7cCfvX0eAlPGmamCTahFSu4p2xl1"
}
},
{
"-N0KSFc1rg91sufbUftO": {
"member_id": "7cCfvX0eAlPGmamCTahFSu4p2xl1"
},
"-N0KSRwxNp34-JhkLWDE": {
"member_id": "ssKze4rM5ucJWY9oBaJAMY7zUG03"
}
},
{
"-N0bdv6XGGfW-HDA2heI": {
"member_id": "Lu7cfs7stqhgXXzAUp9iA7OxYaH2"
}
},
{
"-N0bnRZKUDBULaCECPfq": {
"member_id": "Lu7cfs7stqhgXXzAUp9iA7OxYaH2"
}
}
]
my memberId
的值与 2
和 3
的最后两个值相同,其中 member_id: 'Lu7cfs..
所以在这段代码之后:
onValue(dbRef, (snapshot) => {
const data = snapshot.val();
for (var key in data) {
if (data.hasOwnProperty(key)) {
groupArr = data[key];
}
}
snapshot.forEach((groupSnapshot) => {
memberArr.push(groupSnapshot.child("members").val());
let memberExists = Object.values(memberArr).includes(memberId);
console.log(memberArr);
});
});
memberExists
最后两个应该 return 正确,但对所有这些都 return 错误。
这是数组 console.log 的图片:
您需要将数组映射到成员 ID 数组,然后对它们进行计数并过滤掉出现次数超过 1 次的。
获取所有 ID 的数组:
const ids = memberArr
.map(entry => Object.values(entry))
.map(({ member_id }) => member_id);
// ids = ['7cCfvX0eAlPGmamCTahFSu4p2xl1', '7cCfvX0eAlPGmamCTahFSu4p2xl1', 'ssKze4rM5ucJWY9oBaJAMY7zUG03', 'Lu7cfs7stqhgXXzAUp9iA7OxYaH2', 'Lu7cfs7stqhgXXzAUp9iA7OxYaH2']
这是获取唯一 ID 的完整代码:
const countMap = memberArr
.map(entry => Object.values(entry))
.map(({ member_id }) => member_id)
.reduce((idsCountMap, id) => {
idsCountMap[id] = idsCountMap[id] || 0;
idsCountMap[id]++;
return idsCountMap;
}, {});
const uniqueIds = Object.entries(countMap)
.filter(([, count]) => count === 1)
.map(([id]) => id);
你可以这样做:
const data = [{'-N0IZXQkPiHD9yfwi-M1': { member_id: '7cCfvX0eAlPGmamCTahFSu4p2xl1'}},{'-N0KSFc1rg91sufbUftO': {member_id: '7cCfvX0eAlPGmamCTahFSu4p2xl1'},'-N0KSRwxNp34-JhkLWDE': {member_id: 'ssKze4rM5ucJWY9oBaJAMY7zUG03'}},{'-N0bdv6XGGfW-HDA2heI': {member_id: 'Lu7cfs7stqhgXXzAUp9iA7OxYaH2'}},{'-N0bnRZKUDBULaCECPfq': {member_id: 'Lu7cfs7stqhgXXzAUp9iA7OxYaH2'}}]
const ids = data
.map(
o => Object
.values(o)
.map(o => o.member_id)
)
.flat()
const hasDuplicatedIds = (new Set(ids)).size !== ids.length
console.log(hasDuplicatedIds)
成功了!基本上需要创建一个 Object.values() 数组并对每个对象执行 forEach
,然后只需执行 if statement
比较 obj.member_id
与我的 memberId
snapshot.forEach((groupSnapshot) => {
var memberValue = (groupSnapshot.child('members').val())
var uniqueMemberArr = (Object.values(memberValue))
uniqueMemberArr.forEach((memberObj) => {
if(memberObj.member_id == memberId) {
....
我有一个变量,memberId
,它有一个唯一的值。我正在尝试对来自 firebase 的对象数组使用 Object.values()
,对数组中的唯一 firebase id 使用 return true。这是我的 memberArr
的 console.log,它在此 onValue
调用之前定义为 let memberArr= [];
[
{
"-N0IZXQkPiHD9yfwi-M1": {
"member_id": "7cCfvX0eAlPGmamCTahFSu4p2xl1"
}
},
{
"-N0KSFc1rg91sufbUftO": {
"member_id": "7cCfvX0eAlPGmamCTahFSu4p2xl1"
},
"-N0KSRwxNp34-JhkLWDE": {
"member_id": "ssKze4rM5ucJWY9oBaJAMY7zUG03"
}
},
{
"-N0bdv6XGGfW-HDA2heI": {
"member_id": "Lu7cfs7stqhgXXzAUp9iA7OxYaH2"
}
},
{
"-N0bnRZKUDBULaCECPfq": {
"member_id": "Lu7cfs7stqhgXXzAUp9iA7OxYaH2"
}
}
]
my memberId
的值与 2
和 3
的最后两个值相同,其中 member_id: 'Lu7cfs..
所以在这段代码之后:
onValue(dbRef, (snapshot) => {
const data = snapshot.val();
for (var key in data) {
if (data.hasOwnProperty(key)) {
groupArr = data[key];
}
}
snapshot.forEach((groupSnapshot) => {
memberArr.push(groupSnapshot.child("members").val());
let memberExists = Object.values(memberArr).includes(memberId);
console.log(memberArr);
});
});
memberExists
最后两个应该 return 正确,但对所有这些都 return 错误。
这是数组 console.log 的图片:
您需要将数组映射到成员 ID 数组,然后对它们进行计数并过滤掉出现次数超过 1 次的。
获取所有 ID 的数组:
const ids = memberArr
.map(entry => Object.values(entry))
.map(({ member_id }) => member_id);
// ids = ['7cCfvX0eAlPGmamCTahFSu4p2xl1', '7cCfvX0eAlPGmamCTahFSu4p2xl1', 'ssKze4rM5ucJWY9oBaJAMY7zUG03', 'Lu7cfs7stqhgXXzAUp9iA7OxYaH2', 'Lu7cfs7stqhgXXzAUp9iA7OxYaH2']
这是获取唯一 ID 的完整代码:
const countMap = memberArr
.map(entry => Object.values(entry))
.map(({ member_id }) => member_id)
.reduce((idsCountMap, id) => {
idsCountMap[id] = idsCountMap[id] || 0;
idsCountMap[id]++;
return idsCountMap;
}, {});
const uniqueIds = Object.entries(countMap)
.filter(([, count]) => count === 1)
.map(([id]) => id);
你可以这样做:
const data = [{'-N0IZXQkPiHD9yfwi-M1': { member_id: '7cCfvX0eAlPGmamCTahFSu4p2xl1'}},{'-N0KSFc1rg91sufbUftO': {member_id: '7cCfvX0eAlPGmamCTahFSu4p2xl1'},'-N0KSRwxNp34-JhkLWDE': {member_id: 'ssKze4rM5ucJWY9oBaJAMY7zUG03'}},{'-N0bdv6XGGfW-HDA2heI': {member_id: 'Lu7cfs7stqhgXXzAUp9iA7OxYaH2'}},{'-N0bnRZKUDBULaCECPfq': {member_id: 'Lu7cfs7stqhgXXzAUp9iA7OxYaH2'}}]
const ids = data
.map(
o => Object
.values(o)
.map(o => o.member_id)
)
.flat()
const hasDuplicatedIds = (new Set(ids)).size !== ids.length
console.log(hasDuplicatedIds)
成功了!基本上需要创建一个 Object.values() 数组并对每个对象执行 forEach
,然后只需执行 if statement
比较 obj.member_id
与我的 memberId
snapshot.forEach((groupSnapshot) => {
var memberValue = (groupSnapshot.child('members').val())
var uniqueMemberArr = (Object.values(memberValue))
uniqueMemberArr.forEach((memberObj) => {
if(memberObj.member_id == memberId) {
....