如果另一个属性的值与常量匹配,我想返回对象的一个属性。
示例:
// 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中看到,这将返回一个布尔值数组。我想返回纯值。有任何想法吗?谢谢!
没有检查您的代码是否有效,但是正如您所说的,它返回一个布尔数组,因此请尝试使用array.find
获得第一个匹配项。
const MATCH = featureTogglesArray.find((feature: IFeatureToggle) => feature.name === featureToggle);
return MATCH === undefined ? false : MATCH.enabled;
您是否正在寻找类似的东西?
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函数编写此代码,但是我看不到有什么可以使它简单得多。