Ramda или ES6 - вернуть значение свойства объекта после фильтрации массива объектов - PullRequest
0 голосов
/ 21 января 2020

Я хочу вернуть одно из свойств объекта, если значение другого свойства соответствует константе.

Примеры:

// 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);
};

Это, как вы можете видеть по наборам, возвращает массив логических значений. Я хочу вернуть простое значение. Любые идеи? Спасибо !!

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Не проверял, работает ли ваш код, но, как вы сказали, он возвращает логический массив, поэтому попробуйте использовать array.find, чтобы получить первое совпадение.

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

1 голос
/ 21 января 2020

Вы ищете что-то подобное?

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, но я не вижу там ничего такого, что могло бы сделать это намного проще.

...