你想要做的是创建一个对象图,你可以随心所欲地用你的XML树进行递归遍历。每个JavaScript对象都是一张地图(又名“关联数组”,但我不喜欢这个词,因为它们不是数组)。
var obj = {}; // A blank object
obj.foo = "bar"; // Now it has a property called "foo"
console.log(obj.foo); // Accessing the property via dotted notation and a literal
console.log(obj["foo"]); // You can also use [] notation and a string
var s = "foo";
console.log(obj[s]); // And of course the string can be the result of any expression,
// including coming from a variable
你可以看到[]
符号与字符串名称如何组合:一个对象的属性可以通过点符号与文字(obj.foo
),和通过[]
符号用字符串(obj["foo"]
)访问当你遍历你的结构时,可以很容易地使用它来建立一个图表。您可以非常类似于您的示例访问结果,只是略有不同。我可能会选择通过鸡尾酒名称来键入地图,然后有一个ingredients
属性列出成分(作为对象数组,或者只是使用成分名称作为关键字)。但你可以选择不具备ingredients
财产和代替有鸡尾酒对象直接包含的成分,例如:
console.log(cocktails["Blue Hawaiian"]["White Rum"].name); // "shot"
console.log(cocktails["Blue Hawaiian"]["White Rum"].quantity); // 1
或课程的
var bh = cocktails["Blue Hawaiian"];
console.log(bh["White Rum"].name); // "shot"
console.log(bh["White Rum"].quantity); // 1
有很多,你可以不同的方式根据您想要访问它的方式和您的个人风格来构建您的结果对象图。
的组成部件:
创建一个对象。这很简单:
obj.propertyName = value;
使用括号表示法与财产从传来的名字添加属性的对象:
var obj = {};
用点号属性文字添加属性的物体字符串表达式,而不是从文字:
obj["propertyName"] = value;
// or
var s = "propertyName";
obj[s] = value;
// or even
var s1 = "property", s2 = "Name";
obj[s1 + s2] = value;
在你的情况,你可能会从XML获得属性名称nodeName
或nodeValue
。
将对象放入另一个对象中。这实际上只是分配给一个属性,在那里你将值是一个对象引用:
var outer = {};
var inner = {};
inner.foo = "I'm foo"; // Putting the string "I'm foo" on propety `foo`
outer.bar = inner; // Putting the `inner` object on the property `bar`
console.log(outer.bar.foo); // "I'm foo"
既然你已经知道如何遍历你的XML,这应该让你去上建立一个来自遍历结果的对象图。我并没有编写实际的代码来做这件事,因为在你想如何构建你的对象图时,你需要做出很多决定,完全取决于你想如何去做。
JavaScript没有关联数组,它是可以用作关联数组的对象。 – stivlo
@stivio:JavaScript对象**是**关联数组(相对于“可以用作”)。 :-) –
@ T.J.Crowder我认为JavaScript对象不仅仅是关联数组,而是因为它们可以被声明为对象字面值,但也可以作为函数,并且它们包含其他函数。对象可以用构造函数创建。我错过了什么? – stivlo