Javascript - установить новое свойство на основе других свойств в массиве внутри объекта - PullRequest
1 голос
/ 14 июля 2020

Вот структура данных, с которой я работаю

masterObject: {
  Steps: [
    {
      step: {
        required: false,
      },
      step: {
        required: false,
      },
      step: {
        required: false,
      },
    },
  ]
}

Я хотел бы l oop через массив Steps и проверить, все ли каждый объект step содержит требуемое свойство, равное false. Если все необходимые шаги неверны, я бы хотел прикрепить свойство к объекту masterObject

masterObject.isObjectWithNoRequiredSteps = true;

, которое будет выглядеть так после запуска кода

masterObject: {
  Steps: [
    {
      step: {
        required: false,
      },
      step: {
        required: false,
      },
      step: {
        required: false,
      },
    },
  ]
  isObjectWithNoRequiredSteps: true
}

Если есть пример где один из требуемых объектов step имеет значение true. Я бы хотел установить для нового свойства значение false.

masterObject.isObjectWithNoRequiredSteps = false;

masterObject: {
  Steps: [
    {
      step: {
        required: true,
      },
      step: {
        required: false,
      },
      step: {
        required: false,
      },
    },
  ]
  isObjectWithNoRequiredSteps: false
}

Как лучше всего установить это свойство для объекта более высокого уровня?

1 Ответ

0 голосов
/ 14 июля 2020

Объект внутри массива Steps имеет несколько атрибутов / ключей с одинаковым именем step. Это запрещено в JavaScript. Рассмотрите возможность изменения структуры данных следующим образом:

masterObject: {Steps: [{ 
    step1: { required: false, }, 
    step2: { required: false, }, 
    step3: { required: false, },
}, ] }

Теперь, чтобы определить, является ли каждый шаг внутри массива Steps ложным, используйте следующий код

masterObject.isObjectWithNoRequiredSteps = Object.keys(masterObject.Steps[0]).reduce(function(result, nextStep){
const isRequired = masterObject.Steps[0][nextStep].required; 
return !isRequired && result; 
}, true);
...