不希望打印JavaScript[object]
我需要一些JavaScript方面的帮助,我正在尝试使用JavaScript对XML数据进行排序,我成功地完成了排序部分,但是输出返回了[object object],我不希望它被打印出来,所以我需要一些帮助来修复这个问题,以便获得正确的输出。我正在挂一把活小提琴。所有这些都需要使用JavaScript而不是JQUERY来完成 我不希望[object object],[object object]被打印为输出。我希望输出如下格式不希望打印JavaScript[object],javascript,xml,object,xml-parsing,Javascript,Xml,Object,Xml Parsing,我需要一些JavaScript方面的帮助,我正在尝试使用JavaScript对XML数据进行排序,我成功地完成了排序部分,但是输出返回了[object object],我不希望它被打印出来,所以我需要一些帮助来修复这个问题,以便获得正确的输出。我正在挂一把活小提琴。所有这些都需要使用JavaScript而不是JQUERY来完成 我不希望[object object],[object object]被打印为输出。我希望输出如下格式 谢谢你我想你的问题是你不理解物体的结构 如果确实添加了cons
谢谢你我想你的问题是你不理解物体的结构 如果确实添加了
console.log(parsedObject)代码>在脚本的底部,您可以在控制台中看到对象的结构
例如(控制台输出):
Object
children: Array[4]
0: Object
children: Array[4]
name: "book"
__proto__: Object
1: Object
2: Object
3: Object
length: 4 // the length of the array
__proto__: Array[0]
name: "bookstore"
__proto__: Object
因此,正如您在此结构中看到的,要输出书店
,您需要使用:
obj['name']
但是,如果要输出子级的名称,则需要使用:
obj['children'][prop]['name']
而不是obj[prop]
因此,如果要在子对象上循环,则需要使用:
for(obj['children']中的var-prop){
而不是for(obj中的var-prop){
`
我希望这能对您有所帮助。这里有个问题:
li.appendChild(document.createTextNode(obj[prop]));
您正在创建一个文本节点并将其分配给obj[prop]
,如果该节点还不是字符串,它将转换为字符串。如果它是对象,则对象的字符串转换为[object object]
您需要做的是测试obj[prop
]是否是需要迭代的属性的对象,是否是需要迭代的项的数组,是否只是要显示的节点
现在,您的代码似乎没有组织好,只需更改几行代码即可快速解决问题。您需要采取的主要方法是在树中的下一个节点上调用函数。在该函数开始时,它需要确定它有什么。它是否有叶节点(仅显示它)或者它是否有一个父节点(必须显示父节点,然后在子节点上迭代)。您的代码正试图对父节点进行字符串化并显示它,这会给您带来所看到的哑对象转换。您必须使您的代码比这更智能,以便在您有父节点时实际检测并相应地处理它。问题
我认为最基本的问题是迭代对象属性。因为您知道每个对象都包含一个名称和一个子数组列表,所以您希望只迭代子数组列表。如果您迭代对象属性,您将得到[object object],因为您将在列表中追加一个属性
解决方案
我尝试了一下,下面是我的想法。你必须根据自己的需要进行调整。我使用forEach函数对每个子项进行迭代。你还可以编写一个更快的循环
function generate(list) {
// Initialize variables
var ul = document.createElement('ul');
var li = document.createElement('li');
if (typeof list !== 'undefined') {
li = document.createElement('li');
li.appendChild(document.createTextNode(list.name));
// If children are defined, then for each child,
// create its list and append it to this list item.
if (typeof list.children !== 'undefined') {
list.children.forEach(function(child) {
li.appendChild(generate(child));
});
}
ul.appendChild(li.cloneNode(true));
}
return ul;
};
把你的问题分解成更小的问题
函数li(text){//创建一个文本列表项
var节点=document.createElement('li');
if(text)node.appendChild(document.createTextNode(text));
返回节点;
}
函数getTextItems(父项,标记){//从节点获取文本列表
var list=parent.getElementsByTagName(标记),
arr=[],i;
对于(i=0;i
知道怎么做吗???可能是类似于if(typeof obj[prop]=“object”)的复制品//做点什么
我正在试图弄清楚应该使用什么代码来执行此测试,请告诉我应该如何执行此测试check@user3314588-我正在查看您的JSFIDLE。我注意到的第一件事是,我在该行遇到了一个数组。您必须将该数组检测为一个数组并迭代其内容,但是您的code的结构不太适合在不改变其他内容的情况下轻松迭代。这与我在OP前面的问题中所说的相同。我认为OP实际上是在问“为我将此xml转换为ul树”,所以我在这个问题上的回答不同…一切都乱七八糟,你能给我提供一个生活提琴吗?当然,看到了,对不起,先生,这不起作用
li.appendChild(document.createTextNode(obj[prop]));
function generate(list) {
// Initialize variables
var ul = document.createElement('ul');
var li = document.createElement('li');
if (typeof list !== 'undefined') {
li = document.createElement('li');
li.appendChild(document.createTextNode(list.name));
// If children are defined, then for each child,
// create its list and append it to this list item.
if (typeof list.children !== 'undefined') {
list.children.forEach(function(child) {
li.appendChild(generate(child));
});
}
ul.appendChild(li.cloneNode(true));
}
return ul;
};