Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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 我想正确地返回儿童物品。我该怎么办?_Javascript - Fatal编程技术网

Javascript 我想正确地返回儿童物品。我该怎么办?

Javascript 我想正确地返回儿童物品。我该怎么办?,javascript,Javascript,我想像那样返回,但只返回'null'。。 需要检查子对象的id,并使用递归返回子对象。 所以我就这样写。但是我不知道。。 如何正确返回children id的元素?我将使用完全不同的方法,并使用JSON.stringify方法的魔力,更具体地说,是replacer可选参数,它允许使用回调函数作为过滤器 如您所见,它大大简化了最终代码。它也可以修改为不仅引入id,还引入任何键或值,就像我在最后一个方法中所做的那样 编辑:根据您的建议,由于您更喜欢递归函数,我建议您使用Array.reduce方法。

我想像那样返回,但只返回'null'。。 需要检查子对象的id,并使用递归返回子对象。 所以我就这样写。但是我不知道。。
如何正确返回children id的元素?

我将使用完全不同的方法,并使用JSON.stringify方法的魔力,更具体地说,是replacer可选参数,它允许使用回调函数作为过滤器

如您所见,它大大简化了最终代码。它也可以修改为不仅引入id,还引入任何键或值,就像我在最后一个方法中所做的那样

编辑:根据您的建议,由于您更喜欢递归函数,我建议您使用Array.reduce方法。它允许对所有属性进行优雅的迭代,直到满足需求为止

使用null作为初始值(这是reduce方法的最后一个参数),它允许以以下方式迭代数组中的所有字段:

由于初始值为null,因此在第一次迭代时将始终跳过第一个if

如果属性id存在并且等于您试图查找的值,则第二个if将为累加器设置currentValue

第三个if可以添加Array.isArray来添加类型验证,它将检查属性子级是否存在。因为它是最后一个,所以只有在所有其他条件都不满足的情况下,它才会起作用。如果此属性存在,它将再次调用Ha8Recursive以重新启动进程

最后,如果两者都不起作用,它应该返回null。如果输入id不存在,缺少最后一个条件将返回undefined

常量Ha8=数组,inputKey,inputValue=>{ 让children=null; JSON.stringifyarray,键,值=>{ 如果值[inputKey]&&value[inputKey]==inputValue{ 儿童=价值; } 返回值; }; 返回儿童; }; const Ha8Recursive=数组,inputKey,inputValue=>{ return array.reduceacumerator,currentValue=>{ 中频累加器{ 回流蓄能器; }否则,如果currentValue[inputKey]&¤tValue[inputKey]==inputValue{ 返回当前值; }如果为currentValue.children,则为else{ 返回Ha8RecursivecurrentValue.children、inputKey、inputValue; }否则{ 返回null; } },空 } const input=[{id:1,name:johnny},{id:2,name:ingi,children:[{id:3,name:johnson},{id:5,name:steve,children:[{id:6,name:lisa}]},{id:11},{id:13}]; log'JSON stringify function'; console.logha8输入,“id”,5; console.log“递归函数”
console.logha8递归输入'id',5;我认为ifcol==id应该是ifcol&&col.id==id。您还必须交换条件。在遍历对象的子对象(如果有)之前,您必须先检查对象的ID。谢谢您的提示!嗯,还是不行。。我换了“上校身份证”。但是为什么col===col&&col.id?我不明白。。你能给我解释一下吗?我不是这个意思。我说过,在遍历对象的子对象之前,应该先检查对象ID,然后交换检查:if arr[I]['ID']==ID{…}else if Array.isArrayarr[I].children{…}。@Felix Kling ohh谢谢,最后我被修复了,但仍然有一个不同的错误xd hahaha omg。。我将上传其他问题。。。非常感谢。谢谢你的帮助。但是我想使用递归
function Ha8(arr, id) {
  let result = [];
  for(let i = 0;  i < arr.length; i++) {
    if(Array.isArray(arr[i].children)) {
     // if it is a array, it going to be run recursive
      result.push(arr[i].children)
    const col = Ha8(result[i], id);
      if(col === id)  {
        // find it in array in array 
        return result
        // then return the id object, 
      } else {
        continue; // still can't find.. go ahead! 
      }  
    } else if (arr[i]['id']===id) {
      return arr[i] // will return valid id object 
  }
  return null // if its none , return null, or parameter id is undefined. 
 }
}
let input = [
  {
    id: 1,
    name: 'johnny',
  },
  {
    id: 2,
    name: 'ingi',
    children: [
      {
        id: 3,
        name: 'johnson',
      },
      {
        id: 5,
        name: 'steve',
        children: [
          {
            id: 6,
            name: 'lisa',
          },
        ],
      },
      {
        id: 11,
      },
    ],
  },
  {
    id: '13',
  },
];

output = Ha8(input, 5);
console.log(output); // --> { id: 5, name: 'steve', children: [{ id: 6, name: 'lisa' }] }

output = Ha8(input, 99);
console.log(output); // --> null