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