У меня есть объект JSON, который я получаю по умолчанию: -
$scope.ContentObj= {
"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"
}
],
"_version": "2.0",
"__prefix": "xsl"
}
ПРИМЕЧАНИЕ: - Я выполняю операцию на attribute
второго attribute-set
имени: pagenum
Теперь я делаю массив attribute-set[1]-> attribute
, поскольку он является объектом.Я делаю attribute
массив, потому что мне нужно добавить в него больше объектов.
if(typeof $scope.ContentObj.stylesheet["attribute-set"][1].attribute === "object"){ //Check if object
const content = $scope.ContentObj.stylesheet["attribute-set"][1].attribute; //Get the content
$scope.ContentObj.stylesheet["attribute-set"][1].attribute = [content]; //Put the content in an array
}
Теперь он успешно создает массив: -
$scope.ContentObj= {
"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"
}
],
"_version": "2.0",
"__prefix": "xsl"
}
После этого я пытаюсьтолкать объекты, проверяя _name
, который уже присутствует там или нет.Я могу успешно вставить этот код в массив с помощью следующего кода: -
//check color
var checkContentPageColor = obj => obj._name === 'color';
//for checking font name
var checkContentPageFont = obj => obj._name === 'font-family';
//check color in the attr json
var checkContentPageColor_available = $scope.ContentObj.stylesheet["attribute-set"][1].attribute.some(checkContentPageColor);
// check font family
var checkContentPageFont_available = $scope.ContentObj.stylesheet["attribute-set"][1].attribute.some(checkContentPageFont);
if( checkContentPageColor_available === false && checkContentPageFont_available === false ){
console.log('not available' );
$scope.ContentObj.stylesheet["attribute-set"][1].attribute.push({
"_name": "color",
"__prefix": "xsl",
"__text": "black"
},{
"_name": "font-family",
"__prefix": "xsl",
"__text": "sans"
}
);
console.log("pushed successfully");
console.log($scope.ContentObj);
}
Итак, теперь я получаю результат, подобный этому { attribute: [{..},{..},{..}],something }
, который является правильным.: -
$scope.ContentObj= {
"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": "100"
},
{
"_name": "color",
"__prefix": "xsl",
"__text": "black"
},
{
"_name": "font-family",
"__prefix": "xsl",
"__text": "sans"
}
],
"_name": "pagenum",
"__prefix": "xsl"
}
],
"_version": "2.0",
"__prefix": "xsl"
}
После этого, когда я перезагружаю приложение, код снова получает толчок, создавая двойной массив.JSON теперь выглядит следующим образом { attribute: [[{..},{..},{..}],{..},{..}],something }
: -
{
"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": "100"
},
{
"_name": "color",
"__prefix": "xsl",
"__text": "black"
},
{
"_name": "font-family",
"__prefix": "xsl",
"__text": "sans"
}],
{
"_name": "color",
"__prefix": "xsl",
"__text": "black"
},
{
"_name": "font-family",
"__prefix": "xsl",
"__text": "sans"
}
],
"_name": "pagenum",
"__prefix": "xsl"
}
],
"_version": "2.0",
"__prefix": "xsl"
}
Где я ошибаюсь?Предложите некоторые изменения в соответствии с моим кодом, которые я должен сделать.Я застрял здесь с давних времен.