读取并推送对象到另一个没有数组的对象中

时间:2018-12-04 08:57:44

标签: angularjs json object

我正在尝试从JSON检查并推送对象详细信息中的对象。

这是我的JSON的样子

{
  "stylesheet": {
    "attribute-set": [
      {
        "attribute": [
          {
            "_name": "text-align",
            "__prefix": "xsl",
            "__text": "end"
          },
          {
            "_name": "end-indent",
            "__prefix": "xsl",
            "__text": "10pt"
          }
        ],
        "_name": "odd__header",
        "__prefix": "xsl"
      },     
      {
        "attribute": {
          "_name": "font-weight",
          "__prefix": "xsl",
          "__text": "bold"
        },
        "_name": "pagenum",
        "__prefix": "xsl"
      }
      ],
    "_xmlns:xsl": "http://www.w3.org/1999/XSL/Transform",
    "_xmlns:fo": "http://www.w3.org/1999/XSL/Format",
    "_version": "2.0",
    "__prefix": "xsl"
  }
}

现在,我正在尝试读取属性设置值[1] ,即; “ pagenum” 。在这里,我试图检查名称的更多属性值。如果不存在,则将其推入该属性集中。

我将 attribute-set [0 ]放入array并没有任何问题。在这里,我在 attribute-set [1]中得到了一个对象。

将此属性用于attr-set [1],但抛出错误-Uncaught TypeError: $scope.contentObj.stylesheet.attribute-set[1].attribute.some is not a function

//for checking font name
            var checkcontentPageFont = obj => obj._name === 'font-family';
            // check font family
            var checkcontentPageFont_available = $scope.contentObj.stylesheet["attribute-set"][1].attribute.some(checkcontentPageFont);

            if(checkcontentPageFont_available  === true ){
            }
            else{
                 $scope.contentObj.stylesheet["attribute-set"][1].attribute.push({
                            "_name": "font-family",
                            "__prefix": "xsl",
                            "__text": "sans"
                          }
                          );                
            }

如果存在像 attribute-set [0] 这样的数组,我可以成功实现上述代码。如何检查单个对象。如果未找到,则push和一个数组将在 attribute-set [1] 吗?

1 个答案:

答案 0 :(得分:0)

在您的示例中,$scope.contentObj.stylesheet.attribute-set[0].attribute确实是一个数组,而$scope.contentObj.stylesheet.attribute-set[1].attribute是一个对象,该原型没有some()方法。我认为这只是一个错字,所以我将$scope.contentObj.stylesheet.attribute-set[1].attribute更改为一个数组,现在一切似乎都可以正常工作:

const data = {
  "stylesheet": {
    "attribute-set": [
      {
        "attribute": [
          {
            "_name": "text-align",
            "__prefix": "xsl",
            "__text": "end"
          },
          {
            "_name": "end-indent",
            "__prefix": "xsl",
            "__text": "10pt"
          }
        ],
        "_name": "odd__header",
        "__prefix": "xsl"
      },     
      {
        "attribute": [
          {
            "_name": "font-weight",
            "__prefix": "xsl",
            "__text": "bold"
          },
          {
            "_name": "pagenum",
            "__prefix": "xsl"
          }
        ]  
      }
    ],
    "_xmlns:xsl": "http://www.w3.org/1999/XSL/Transform",
    "_xmlns:fo": "http://www.w3.org/1999/XSL/Format",
    "_version": "2.0",
    "__prefix": "xsl"
  }
}

const checkcontentPageFont = obj => obj._name === 'font-family';

const checkcontentPageFont_available = data.stylesheet["attribute-set"][1].attribute.some(checkcontentPageFont);

if (!checkcontentPageFont_available) {
  data.stylesheet["attribute-set"][1].attribute.push({
    "_name": "font-family",
    "__prefix": "xsl",
    "__text": "sans"
  });  
}

console.log(data);