我想要返回一个对象的一个属性,如果另一个属性的值与一个常量匹配。
示例:
// 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所看到的,这将返回一个布尔值的数组。我想返回普通的值。有什么想法吗?谢谢你!!
发布于 2020-01-22 01:31:17
我没有检查您的代码是否工作,但是正如您所说的,它返回一个布尔数组,所以尝试使用array.find获取第一个匹配项。
const MATCH = featureTogglesArray.find((feature: IFeatureToggle) => feature.name === featureToggle);
return MATCH === undefined ? false : MATCH.enabled;发布于 2020-01-22 02:00:54
你在找这样的东西吗?
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函数来编写此函数,但我并没有看到太多可以使此变得更简单的东西。
https://stackoverflow.com/questions/59846268
复制相似问题