您好,我需要一些帮助来了解es6过滤器功能。
我正在尝试检查membersUID中的responseUID是否为真。
从我阅读的内容中,因为responseUID不在membersUID中,所以checkUID应该返回false?
Array.prototype
那我在做什么错或我读到的不是真的?
答案 0 :(得分:1)
membersUID
是一个数组,因此可以像这样简单地调用它:
membersUID.filter(u => membersUID[u].playerUid == responseUID)
filter
在数组上调用,并在满足条件时返回新数组/ true . i.e. in your case when
playerUid ===
responseUID`它将返回长度为1的数组
然后可以使用[0]
访问该对象。但是您可以改用find
,它将返回对象而不是数组
答案 1 :(得分:1)
您可以使用some函数,如果至少有一个匹配项,它将返回true。
您也不需要在数组上使用.keys
对其进行迭代。
filter返回一个数组,这是事实。如果要使用长度进行检查,则必须检查长度。
var membersUID = [
{ playerUid: 162847201, displayName: "Player 1", isLeader: 1, canSell: 1 },
{ playerUid: 162847202, displayName: "Player 2", isLeader: 0, canSell: 0 },
{ playerUid: 162847203, displayName: "Player 3", isLeader: 0, canSell: 0 }
];
var responseUID = 162847204;
var checkUID = membersUID.some(({playerUid}) => playerUid === responseUID)
if (checkUID) {
console.log('responseUID is in membersUID');
} else if (!checkUID) {
console.log('responseUID is not membersUID');
}
答案 2 :(得分:1)
filter函数返回一个数组,并且数组是真实值,这意味着如果您尝试在if条件中使用它们,它们将始终执行if块。 至于过滤器函数实际执行的操作,它将遍历一个数组并返回另一个数组,该数组具有满足您在回调函数中传递的条件的元素。 因此,如果您运行以下命令:
var membersUID = [
{ playerUid: 162847201, displayName: "Player 1", isLeader: 1, canSell: 1 },
{ playerUid: 162847202, displayName: "Player 2", isLeader: 0, canSell: 0 },
{ playerUid: 162847203, displayName: "Player 3", isLeader: 0, canSell: 0 }
];
var responseUID = 162847204;
var checkUID = membersUID.filter(u => u.playerUid === responseUID)
然后checkUID
将是一个空数组[]
。
您可以在这样的条件下使用它
if(checkUID.length){ // found something
// run something
}
答案 3 :(得分:0)
filter
将数组作为输入,并返回已过滤项的数组作为输出。
因此,任何有效输入都是真实的。
答案 4 :(得分:0)
您不需要执行Object.keys
来遍历array
,我还没有测试过,但是我很确定这就是问题所在。
var membersUID = [
{ playerUid: 162847201, displayName: "Player 1", isLeader: 1, canSell: 1 },
{ playerUid: 162847202, displayName: "Player 2", isLeader: 0, canSell: 0 },
{ playerUid: 162847203, displayName: "Player 3", isLeader: 0, canSell: 0 }
];
var responseUID = 162847204;
var checkUID = membersUID.filter(u => u.playerUid === responseUID)
答案 5 :(得分:0)
改为使用查找。过滤器将返回空数组,该数组在if(checkUID)
var membersUID = [
{ playerUid: 162847201, displayName: "Player 1", isLeader: 1, canSell: 1 },
{ playerUid: 162847202, displayName: "Player 2", isLeader: 0, canSell: 0 },
{ playerUid: 162847203, displayName: "Player 3", isLeader: 0, canSell: 0 }
];
var responseUID = 162847204;
var checkUID = Object.keys(membersUID).find(u =>
membersUID[u].playerUid === responseUID
);
if (typeof checkUID !== 'undefined') {
console.log('responseUID is in membersUID');
} else {
console.log('responseUID is not membersUID');
}
答案 6 :(得分:0)
也许这段代码会有用
var membersUID = [{
playerUid: 162847201,
displayName: "Player 1",
isLeader: 1,
canSell: 1
},
{
playerUid: 162847202,
displayName: "Player 2",
isLeader: 0,
canSell: 0
},
{
playerUid: 162847203,
displayName: "Player 3",
isLeader: 0,
canSell: 0
}
];
var responseUID = 162847204;
var checkUID = membersUID.filter(u => {
return u.playerUid === responseUID;
})
console.log('checkUID: ', checkUID);
console.log('checkUID lenght: ', checkUID.length);