如何检查javascript中是否存在object.subobject.SubSubSubObject?
层次结构可能很深,因此如何检查根对象中是否存在a属性?如果没有,那么创建它 我有下面的html如何检查javascript中是否存在object.subobject.SubSubSubObject?,javascript,serialization,javascript-objects,Javascript,Serialization,Javascript Objects,层次结构可能很深,因此如何检查根对象中是否存在a属性?如果没有,那么创建它 我有下面的html <div id="container"> <div id="level-1"> <input id="value-1" group="a.b" name="c" value="some-value-1"> </div> </div> 我的努力: function traverse(id, obj) { va
<div id="container">
<div id="level-1">
<input id="value-1" group="a.b" name="c" value="some-value-1">
</div>
</div>
我的努力:
function traverse(id, obj) {
var methodName = "traverse";
var elementToTraverse = document.getElementById(id);
var currentElementLength = elementToTraverse.childNodes.length;
if (currentElementLength > 0) {
var children = getChildNodes(elementToTraverse);
for (var ch in children) {
var currentChild = children[ch];
//ignore the text nodes
if (currentChild.nodeType == 3) {
continue;
}
if (currentChild.nodeType == 1 && currentChild.childNodes.length > 0 && currentChild.id != "") {
//call without the object argument as it has already been constructed.
traverse(currentChild.id, obj);
}
else if (currentChild.nodeType == 1 && currentChild.id != "" && currentChild.getAttribute('name') != null) {
if (DEBUG) {
logOnConsole(methodName, currentChild.getAttribute('name') + "--" + currentChild.id, logLevel.INFO);
}
var group = currentChild.getAttribute('group') || null;
var name = currentChild.getAttribute('name');
var value = getValue(currentChild);
if (value == "" || value == undefined) {
if(group){
if(isNull(obj[group])){
obj[group] = new Object();
}
obj[group][name] = "";
}
else{
obj[name] = "";
}
}
else if(group){
if(isNull(obj[group])){
obj[group] = new Object();
}
obj[group][name] = value;
}
else {
obj[name] = value;
}
}
else {
if (DEBUG) {
logOnConsole(methodName, "Element not useful. \n" + currentChild.nodeName, logLevel.INFO);
}
}
}
}
return obj;
}
我通过遍历('container-id',new Object())调用它,但这将适用于组中的单个值,而不是嵌套结构。试试这个
函数isExist(对象,路径){
patharray=path.split(“.”);
对于(变量i=0;i document.body.innerHTML=isExist({subobject:{subsubsubobject:{test:34}}},'subobject.subsubsubobject')代码>添加一个例子和你的努力。我做了,它是否仍然被否决?它不会告诉哪个子对象不存在。那么我就不知道该创建哪一个了。所以要完成这个任务,我应该从根目录中逐个检查完整的层次结构吗?怎么说?@cafebabe1991不返回false,您可以返回patharray[i],它是子对象不存在的,但您必须递归调用此函数来创建每个尚未构造的对象。(并且你没有在你的答案中创建对象)@cafebabe1991,而是返回任何东西,只是初始化缺少的对象,例如obj=obj[patharray[i]]={};
function traverse(id, obj) {
var methodName = "traverse";
var elementToTraverse = document.getElementById(id);
var currentElementLength = elementToTraverse.childNodes.length;
if (currentElementLength > 0) {
var children = getChildNodes(elementToTraverse);
for (var ch in children) {
var currentChild = children[ch];
//ignore the text nodes
if (currentChild.nodeType == 3) {
continue;
}
if (currentChild.nodeType == 1 && currentChild.childNodes.length > 0 && currentChild.id != "") {
//call without the object argument as it has already been constructed.
traverse(currentChild.id, obj);
}
else if (currentChild.nodeType == 1 && currentChild.id != "" && currentChild.getAttribute('name') != null) {
if (DEBUG) {
logOnConsole(methodName, currentChild.getAttribute('name') + "--" + currentChild.id, logLevel.INFO);
}
var group = currentChild.getAttribute('group') || null;
var name = currentChild.getAttribute('name');
var value = getValue(currentChild);
if (value == "" || value == undefined) {
if(group){
if(isNull(obj[group])){
obj[group] = new Object();
}
obj[group][name] = "";
}
else{
obj[name] = "";
}
}
else if(group){
if(isNull(obj[group])){
obj[group] = new Object();
}
obj[group][name] = value;
}
else {
obj[name] = value;
}
}
else {
if (DEBUG) {
logOnConsole(methodName, "Element not useful. \n" + currentChild.nodeName, logLevel.INFO);
}
}
}
}
return obj;
}