Ramda或ES6-过滤对象数组后返回对象属性的值

问题描述 投票:0回答:2

如果另一个属性的值与常量匹配,我想返回对象的一个​​属性。

示例:

// The Array
[
 {name: "Name1", description: "Name1 Description", enabled: true},
 {name: "Name2", description: "Name2 Description", enabled: false},
 {name: "Name3", description: "Name3 Description", enabled: false}
]

// The Constant
enum constant {
  Name1 = 'Name1',
  Name2 = 'Name2',
  Name3 = 'Name3'
}

// What I want to return
// Value of enabled property, for the matching object

这是我编写的代码:

const filterBasedOnToggle = (featureTogglesArray: IFeatureToggle[], featureToggle: Toggle): boolean[] => {
  return featureTogglesArray.filter((feature: IFeatureToggle) => feature.name === featureToggle).map(featureProperty => featureProperty.enabled);
};

您可以从Typings中看到,这将返回一个布尔值数组。我想返回纯值。有任何想法吗?谢谢!

javascript typescript ecmascript-6 ramda.js
2个回答
2
投票

没有检查您的代码是否有效,但是正如您所说的,它返回一个布尔数组,因此请尝试使用array.find获得第一个匹配项。

  const MATCH = featureTogglesArray.find((feature: IFeatureToggle) => feature.name === featureToggle);
  return MATCH === undefined ? false : MATCH.enabled;


1
投票

您是否正在寻找类似的东西?

const filterBasedOnToggle = (toggles) => (searchName) => {
  const feature = toggles .find (({name}) => name == searchName) || {}
  return feature .enabled
}

const featureToggles = [{name: "Name1", description: "Name1 Description", enabled: true}, {name: "Name2", description: "Name2 Description", enabled: false}, {name: "Name3", description: "Name3 Description", enabled: false}];

const enabledByName = filterBasedOnToggle (featureToggles);

console .log (['Name1', 'Name2', 'Name3', 'Name4'] .map (enabledByName))
//~> [true, false, false, undefined]

此版本使用find而不是filter来仅与第一个匹配……这可能是您的版本的签名问题。如果该值不匹配,它将返回undefined,但是如果您愿意,可以轻松地将该值设为false。您当然可以使用Ramda函数编写此代码,但是我看不到有什么可以使它简单得多。

© www.soinside.com 2019 - 2024. All rights reserved.