【问题标题】:Why is the array empty after filtering? [closed]为什么过滤后数组为空? [关闭]
【发布时间】:2017-02-21 08:13:14
【问题描述】:

我正在尝试过滤数组中的一些对象。但是当我这样做时,我只会得到一个空数组。

代码:

let guilds = guildsData.filter((el) => {
    return el.owner == 'true';
});
console.log(guilds);

数组:

[ 
  { owner: false,
    permissions: 2146958463,
    icon: 'e568d2b87e31358588cb982354628d51',
    id: '267920024570691586',
    name: 'Hydra' },
  { owner: true,
    permissions: 2146958463,
    icon: null,
    id: '269159705794838529',
    name: 'test 2' } ]

(我删除了大部分对象,但它们都看起来像这样)

【问题讨论】:

  • 因为"true" != true
  • 这看起来像是一个真假问题,el.owner 的预期类型是什么?如果您要比较字符串值true,那么您需要使用el.owner === 'true',它将比较el.owner 的值和类型。如果 el.owner 是布尔值,那么您可以使用 let guilds = guildsData.filter(x => x.owner); 进行过滤

标签: javascript arrays node.js


【解决方案1】:

字符串'true'与布尔常量true不同。

== 的一侧是布尔值而另一侧是其他值时,在将该布尔值转换为数字后进行比较。因此

'true' == true

执行为

'true' == 1

【讨论】:

  • @Kinduser 我真的不明白你的意思,我不明白这个问题与这个问题有什么关系。
  • 谢谢,我现在觉得自己很蠢
【解决方案2】:

试试这个:

let guilds = guildsData.filter((el) => {
    return el.owner;
});

无需将true'true' 进行比较(反正它们不一样)。

【讨论】:

    猜你喜欢
    • 2022-11-22
    • 2013-04-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多