Поиск по ключевому слову объекта и функция использования - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть объект, который я пытаюсь вставить в массив

$scope.xslLetterSpacing = {
                            "_name": "letter-spacing",
                            "__prefix": "xsl",
                            "__text": "2pt"
                          };

Итак, над объектом, который я пытаюсь вставить в другой массив: -

$scope.frontObjct = {
"stylesheet": {
    "attribute-set": [{
            "attribute": {
                "_name": "text-align",
                "__prefix": "xsl"
            },
            "_name": "__frontmatter",
            "__prefix": "xsl"
        },
        {
            "attribute": [{
                    "_name": "space-before",
                    "__prefix": "xsl"
                },
                {
                    "_name": "space-before.conditionality",
                    "__prefix": "xsl",
                    "__text": "retain"
                },
                {
                    "_name": "font-size",
                    "__prefix": "xsl",
                    "__text": "16pt"
                },
                {
                    "_name": "font-weight",
                    "__prefix": "xsl",
                    "__text": "500"
                },
                {
                    "_name": "line-height",
                    "__prefix": "xsl",
                    "__text": "90%"
                }
            ],
            "_name": "__frontmatter__title",
            "_use-attribute-sets": "common.title",
            "__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"
}

}

Итак, теперь я пытаюсь поставить условие.Когда _name": "letter-spacing" равен , а не , найденный в attribute-set[1], тогда вставьте объект xslLetterSpacing в массив атрибутов, и если объект данных с _name": "letter-spacing" уже есть в Obj, тогда ничего не делайте.

Я пытался это сделать, повторяется с номером объекта, уже присутствующего в массиве.

angular.forEach($scope.frontObjct.stylesheet["attribute-set"][1].attribute , function(value, key) {
                    if (key !== "_name") {
                    //pushing extra data to attribute field
                        $timeout(function(){
                          $scope.frontObjct.stylesheet["attribute-set"][1].attribute.push($scope.xslLetterSpacing);
                            console.log($scope.frontObjct );
                        },500);
                    }
                });

Куда я иду не так?

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете сделать это

var itemLetterSpacing = $scope.Obj.stylesheet["attribute-set"][1].attribute.filter(function(item) {
      return item._name === "letter-spacing";
})[0];

if(!itemLetterSpacing) { 
     $scope.Obj.stylesheet["attribute-set"][1].attribute.push($scope.xslLetterSpacing);
}
console.log($scope.Obj);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...