如何检查object.subobject.subsubobject是否存在或不在JavaScript中?
层次结构可能非常深,那么如何检查某个属性是否存在于根对象内的某处?如果没有,然后创建它。如何检查object.subobject.subsubobject是否存在或不在JavaScript中?
我有以下的HTML
<div id="container">
<div id="level-1">
<input id="value-1" group="a.b" name="c" value="some-value-1">
</div>
</div>
现在我想将这个输入的值转换成基于父属性的javascript
对象。
所需的输出是
{
"a" : {
"b" : {
"c" : "some-value-1"
}
}
}
我的努力:
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;
}
我把它通过移动( '集装箱ID',新的对象()),但是这会为工作组中的单个值而不是嵌套结构。
试试这个
function isExist(obj, path) {
patharray = path.split(".");
for(var i=0;i < patharray.length; i++) {
obj = obj[patharray[i]];
if(obj === undefined) return false
}
return true;
}
document.body.innerHTML = isExist({subobject:{subsubobject:{test: 34}}}, 'subobject.subsubobject');
它不会告诉哪个子对象不存在。然后我不知道要创建哪一个。为了完成这个工作,我应该从根目录逐一检查完整的层次结构?说啥 ? – cafebabe1991
@ cafebabe1991而不是返回false您可以返回子对象不存在的patharray [i] – Anoop
是的,但您必须递归调用此函数以创建尚未构造的每个对象。 (并且你没有在你的答案中创建对象) – cafebabe1991
添加一个例子,你的努力。 – Mritunjay
我做过了,是不是应该投下来呢? – cafebabe1991