Javascript es6过滤器函数返回true

时间:2020-06-14 12:03:46

标签: javascript

您好,我需要一些帮助来了解es6过滤器功能。

我正在尝试检查membersUID中的responseUID是否为真。

从我阅读的内容中,因为responseUID不在membersUID中,所以checkUID应该返回false?

Array.prototype

那我在做什么错或我读到的不是真的?

7 个答案:

答案 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)

中为true

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);