不希望打印JavaScript[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

我需要一些JavaScript方面的帮助,我正在尝试使用JavaScript对XML数据进行排序,我成功地完成了排序部分,但是输出返回了[object object],我不希望它被打印出来,所以我需要一些帮助来修复这个问题,以便获得正确的输出。我正在挂一把活小提琴。所有这些都需要使用JavaScript而不是JQUERY来完成

我不希望[object object],[object object]被打印为输出。我希望输出如下格式




谢谢你

我想你的问题是你不理解物体的结构

如果确实添加了
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;
};