我正在使用Angular 6,并且具有可以更改属性值的功能,并且还会在数组存在的情况下将该属性添加到数组。

当属性值是true时

{
  "myArray": ["property1"],
  "properties": {
    "property1": {
      "value": true
    },
    "property2": {
      "value": false
    }
  }
}


但是当我尝试更改属性的值(如果不存在数组)时,我得到数组未定义错误

{
  "properties": {
    "property1": {
      "value": false
    },
    "property2": {
      "value": false
    }
  }
}


当存在数组时,如何添加数组并执行与我相同的方法

喜欢

{
  "myArray": ["property2"],
  "properties": {
    "property1": {
      "value": false
    },
    "property2": {
      "value": true
    }
  }
}

最佳答案

我相信您正在寻找的是:


ES6 in operator
Array.isArray()


因此,可以构建如下内容:

const data = {
  "properties": {
    "property1": {
      "value": false
    },
    "property2": {
      "value": false
    }
  }
};

// iterate over keys
for (const property in data.properties) {
  // if value is true
  if (data.properties[property].value) {
    if (Array.isArray(data.myArray)) {
       // property is a string (key)
       data.myArray.push(property);
    } else {
      // not an array do something else
    }
  }
}


可以进行优化,但更多取决于您尝试构建的逻辑。

09-05 06:01
查看更多