Чтение и вставка объекта в другой объект без массива - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь проверить и вставить объект в детали объекта из 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] т.е. "Пагенум" .Я пытаюсь проверить наличие большего значения атрибута с именем.Если нет, вставьте его в этот набор атрибутов.

У меня нет проблем с вводом в атрибута [0 ], как в массиве.Здесь я получил один объект в 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 голосов
/ 13 февраля 2019

В вашем примере $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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...