在另一个对象中读取并推送对象,而不使用数组。
在另一个对象中读取并推送对象,而不使用数组。
我正在尝试从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]中?
在你的示例中,$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].attribute
和stylesheet.attribute-set[1].attribute
应该是相同的格式:数组。在你的问题中,第一个是数组,但第二个是一个对象。