Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:可以遍历嵌套的子元素,但首先找到最深的元素?_Javascript - Fatal编程技术网

Javascript JS:可以遍历嵌套的子元素,但首先找到最深的元素?

Javascript JS:可以遍历嵌套的子元素,但首先找到最深的元素?,javascript,Javascript,背景 var anotherchild = { name: 'Alexander', age: '99', label:'backbtn' }; var firstchild = { name: 'Smith', age: '10', child: another child, label:'backbtn' }; var a = { name: 'John', age: '32', child: first child, label:'backbtn

背景

var anotherchild = {
  name: 'Alexander',
  age: '99',
  label:'backbtn'
};
var firstchild = {
  name: 'Smith',
  age: '10',
  child: another child,
  label:'backbtn'
};
var a = {
  name: 'John',
  age: '32',
  child: first child,
  label:'backbtn'
};


function find(haystack, needle) {
  if (haystack.label === needle) {return haystack; }
  for (var i = 0; i < haystack.children.length; i ++) {
    var result = find(haystack.children[i], needle);
    if (result) { return result; }
  }
  return null;
}


find(myContent, "backbtn").fireEvent('click');
我有一系列包含许多嵌套子元素的对象。我需要找到这些子元素中的哪一个是“后退”按钮,我用label属性=“backbtn”标识了该按钮

一旦我找到了这个孩子,我就会对那个为我做一系列任务的孩子进行fireEvent

现在,我正在成功地使用这段代码遍历我的对象,以找到一个子对象,该子对象的label属性为“backbtn

编辑:添加示例数据

var anotherchild = {
  name: 'Alexander',
  age: '99',
  label:'backbtn'
};
var firstchild = {
  name: 'Smith',
  age: '10',
  child: another child,
  label:'backbtn'
};
var a = {
  name: 'John',
  age: '32',
  child: first child,
  label:'backbtn'
};


function find(haystack, needle) {
  if (haystack.label === needle) {return haystack; }
  for (var i = 0; i < haystack.children.length; i ++) {
    var result = find(haystack.children[i], needle);
    if (result) { return result; }
  }
  return null;
}


find(myContent, "backbtn").fireEvent('click');
var另一个孩子={
姓名:'亚历山大',
年龄:'99',
标签:'backbtn'
};
var firstchild={
姓名:'史密斯',
年龄:"10",,
孩子:另一个孩子,
标签:'backbtn'
};
变量a={
姓名:'约翰',
年龄:'32',
孩子:第一个孩子,
标签:'backbtn'
};
函数查找(草堆、针){
if(haystack.label==针){return haystack;}
for(var i=0;i
问题

现在我的问题是,当我有几个子项被标记为“backbtn”时,上面的函数将简单地匹配它找到的第一个子项并返回该子项

我需要做相反的事情,首先找到最深的元素。


这样做可能吗?

尝试递归地使用
Object.hasOwnProperty()
直到找不到匹配项

var另一个孩子={
姓名:'亚历山大',
年龄:'99'
};
var firstchild={
姓名:'史密斯',
年龄:"10",,
孩子:另一个孩子
};
变量a={
姓名:'约翰',
年龄:'32',
孩子:第一个孩子
};
已找到函数(obj){
警报(JSON.stringify(obj))
}
(功能查找(obj){
if(对象为hasOwnProperty(“子女”)){
查找(对象子对象)
}否则{
发现(obj)
}

}(a) )您尝试过递归吗?“有一系列包含许多嵌套子元素的对象。我需要找到这些子元素中的哪一个是“后退”按钮,我用label属性=“backbtn”标识了它,它可以包括“Objects”的示例有问题吗?你在父母面前找不到孩子,因为只有通过父母才能找到孩子。所以,找到最深的X的唯一方法就是找到所有的X,然后看看哪个是最深的,最后使用那个。@guest271314当然是这样的。var a={name:'John',age:'32',child:firstchild};var firstchild={name:'Smith',age:'10',child:另一个child,label:'backbtn'};var anotherchild={name:'Alexander',age:'99',child:etc,label:'backbtn'};因此,当搜索'backbtn'时,它应该有希望得到Alexander(使用我的上述函数,它会得到Smith的结果)您如何定义“deep”?在检查父项之前,先搜索子项很容易,但仍可能返回向下两级的结果,随后在树中有向下三级的匹配。您缺少对
标签
等于
@torazaburo的检查“您缺少对
标签
等于
的检查”如果正确解释问题,则在OP的现有
查找
函数中包含严格的相等性检查,该检查似乎不会返回预期结果?请参阅“它应该有望导致错误”“@torazaburo是正确的,它需要实际检查label=needle。这是因为在这两者之间有许多其他对象需要检查ignored@Mark@torazaburo是正确的,它需要实际检查label=needle。这是因为在这两者之间有许多其他对象需要忽略?不确定是否正确解释注释?
js
at stacksnippets未返回预期结果?请参阅OP中的“它应有望导致Alexander”?