在另一个对象中读取并推送对象,而不使用数组。

8 浏览
0 Comments

在另一个对象中读取并推送对象,而不使用数组。

我正在尝试从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"

}

}

现在,我正在尝试读取attribute-set的值[1],即"pagenum"。在这里,我正在尝试检查是否存在更多带有名称的属性值。如果不存在,则将其推送到该属性集中。

我在将其推送到attribute-set[0]中没有任何问题,因为它是一个数组。但是在attribute-set[1]中,我得到了一个单个对象。

我尝试了attr-set[1]的代码,但是报错- Uncaught TypeError: $scope.contentObj.stylesheet.attribute-set[1].attribute.some is not a function

//用于检查字体名称

var checkcontentPageFont = obj => obj._name === '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]这样的数组,我可以成功实现上述代码。如何在单个对象中进行检查?如果找不到,如何推送并创建一个数组在attribute-set[1]中?

0
0 Comments

在你的示例中,$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);

你是否手动修改了JSON?如果是这样,那么是错误的,因为JSON是从其他来源生成的。顺便说一下,我已经解决了这个问题。谢谢你的回答。

是的,我手动修改了,假设stylesheet.attribute-set[0].attributestylesheet.attribute-set[1].attribute应该是相同的格式:数组。在你的问题中,第一个是数组,但第二个是一个对象。

0