【问题标题】:How to return boolean value from filter method [closed]如何从过滤器方法返回布尔值[关闭]
【发布时间】:2021-11-27 10:58:30
【问题描述】:

在数组中搜索一个值并根据它的存在返回真或假。

下面是访问我关心的 name 属性的过滤器方法的工作示例:

  const renderNotDifferent = actions.filter(
    (action) => action.name !== "not-different"
  );

如果 action.name 是 === "should-be-different",我想创建另一个属性(布尔值) - 两者不需要组合,只需包括显示语法即可。

谁能建议最好的方法?

【问题讨论】:

标签: javascript filter


【解决方案1】:

它与filter 没有任何关系——你可以另外使用map

const renderNotDifferent = actions.filter(
  action => action.name !== 'not-different' 
).map(
  action => ({ ...action, shouldBeDifferent: action.name === 'should-be-different' })
);

或者,如果你想真正改变现有的对象,你可以使用常规的for of 循环:

for (const action of actions) {
  action.shouldBeDifferent = action.name === 'should-be-different'
}

更新:您的问题有点令人困惑。首先听起来你想为每个数组元素添加一个属性,但现在你的编辑我不确定了。如果您只想使用两个布尔值分别指示任何元素是否具有名称 not-differentshould-be-different,那么您只需要它:

const hasNotDifferent = actions.some(action => action.name === 'not-different')
const hasShouldBeDifferent = actions.some(action => action.name === 'should-be-different')

如果您需要检查更多名称,另一个特别有用(且快速)的选项是使用带有所有不同名称的Set

const names = new Set(actions.map(action => action.name))

if (names.has('not-different')) {
  // render stuff
}

if (names.has('should-be-different')) {
  // render other stuff
}

【讨论】:

  • 感谢您的帮助!是否可以在地图之外访问 shouldBeDifferent?
  • 有点不清楚你在问什么 - 正如你所问的那样,它正在为每个操作添加这样的属性。因此,您可以在之后的每个单独操作中访问它。但现在听起来你的意思是别的 - 请检查我的答案中的更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多