【问题标题】:is there a way to filter array based on flag inside an array有没有办法根据数组内的标志过滤数组
【发布时间】:2018-12-24 14:00:49
【问题描述】:

我正在尝试根据标志 isSome: true 过滤数组。我想在该数组中不存在该标志时进行过滤

var value = [
      { "somevalues": {},
        "moreDetails": {
          "isSome": "true"
        }
      },
      { "somevalues": {},
        "moreDetails": {}
      },
      { "somevalues": {},
        "moreDetails": {}
      },
    ]
const valuewithisSome = value.filter(o => o.moreDetails &&  o.moreDetails.isSome);
const valuewithoutisSome = value.filter(o => o.moreDetails &&  !o.moreDetails.isSome);
console.log(valuewithisSome);
console.log(valuewithoutisSome);

valuewithisSome 正在按预期工作并返回带有isSome: true 的数组。

valuewithoutisSome 没有按预期工作,因为我不想在 morevalues 数组中传递 isSome false,有没有办法在不传递该标志的情况下进行过滤?

【问题讨论】:

  • “无”版本究竟是如何不起作用的?写的应该没问题。
  • "Run code sn-p" 表明它确实有效。这可能不是你真正的代码。

标签: javascript reactjs filter


【解决方案1】:

你已经拥有的“没有”代码应该可以工作:

const valuewithoutisSome = value.filter(o => o.moreDetails &&  !o.moreDetails.isSome);

如果“isSome”属性缺失或显式为 false-y,则表达式 o.moreDetails.isSome 将计算为 undefined,因此在这种情况下,!o.moreDetails.isSome 将是 true

虽然这会起作用,但如果您想显式测试该属性是否为 false,当它实际存在时,您可以这样做:

const valuewithoutisSome = value.filter(o => 
  o.moreDetails &&
  (!("isSome" in o.moreDetails) || !o.moreDetails.isSome)
);

只有在存在“isSome”属性时才会返回false(并过滤掉数组条目)。如果不存在,或者存在且true,则该条目将在过滤结果中。

【讨论】:

  • 非常感谢,这是一个很大的帮助,但我在控制台中为 valuewithoutisSome 得到了空值。有没有办法我们可以在 filter() 中使用 .some() ?
  • 好吧.filter() 永远不会返回null;你确定你的测试代码真的和你发布的一样吗?与您的问题中所写完全相同的代码未显示nullvaluewithoutisSome
  • 它在这里的代码 n-p 中工作,当我尝试在我的 Visual Studio 代码中做同样的事情时,我看到 valuewithoutisSome 的空数组
  • 仔细查看您的实际代码,尤其是差异。可能有一些看起来无害的东西,但实际上这是一个关键的变化。
  • 谢谢,我的模拟数据实际上在除第一个之外的其他数组中没有更多详细信息。我认为这就是与众不同的原因。
【解决方案2】:

您的 isSome 属性类型是字符串。从 true 中删除双重 quetos。

{ "一些值": {}, “更多细节”: { “isSome”:是的 } },

【讨论】:

  • 这是一个很好的建议,尽管字符串 "true" 确实有效。但是isSome: "false"true(这就是为什么这是一个好建议):)
  • 我希望它是布尔值,我没有双引号表示真实。我不知何故错误地插入了这个模拟数据,我很抱歉。
猜你喜欢
  • 2021-07-29
  • 1970-01-01
  • 2021-09-11
  • 2021-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2021-11-01
相关资源
最近更新 更多