Javascript-根据对象内部数组中的其他属性设置新属性

时间:2020-07-14 18:40:47

标签: javascript angularjs loops foreach

这是我正在使用的数据结构

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

我想遍历Steps数组,并检查是否所有每个step对象都包含等于false的属性。 如果所有必需的步骤都为假,我想将一个属性附加到

的masterObject对象
masterObject.isObjectWithNoRequiredSteps = true;

代码运行后看起来像这样

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

如果有一个示例,其中所需的步骤对象之一为true,我想将new属性设置为false

masterObject.isObjectWithNoRequiredSteps = false;

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

在较高级别的对象上设置此属性的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

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