Javascript 如何递归地将对象键值对添加到具有子数组的对象数组中?

Javascript 如何递归地将对象键值对添加到具有子数组的对象数组中?,javascript,arrays,recursion,javascript-objects,Javascript,Arrays,Recursion,Javascript Objects,我仍在学习递归的诀窍,我想在这个嵌套数组树中的每个对象中添加'isChecked:false' const nestedMap = (arr) => { const result = arr.map(row => { if (row.children.length) { const children = row.children.map(child => { return { ...child, isChecked: false };

我仍在学习递归的诀窍,我想在这个嵌套数组树中的每个对象中添加'isChecked:false'

const nestedMap = (arr) => {
  const result = arr.map(row => {
    if (row.children.length) {
      const children = row.children.map(child => {
        return { ...child, isChecked: false };
      });
      return { ...row, isChecked: false, children };
    } else {
      return { ...row, isChecked: false };
    }
  });
  return result[0].children[0]
}

nestedMap([{title: 'page1', children: [{title: 'page2', children: [{title: 'page4'}]}, {title: 'page3'}]}, {title: 'page5', children: []}])
这是我的结果——正如您所看到的,我成功地更新了第一组子项,但没有更新其余的子项

{ title: 'page2',
  children: [ { title: 'page4' } ],
  isChecked: false } 

我知道我应该调用函数本身的某个地方,但我是个白痴。一如既往,我们将非常感谢您的帮助。多谢各位

您的if语句
if(row.children.length){
检查
row.children
是否是长度大于0的数组,因此这里是您希望再次调用
nestedMap
的地方

试着这样做:

const nestedMap=(arr)=>{
const result=arr.map(行=>{
//检查row.children是否存在,以及其长度是否存在/是否大于0
if(row.children&&row.children.length){
const children=nestedMap(row.children);
返回{…行,已选中:false,children};
}否则{
返回{…行,isChecked:false};
}
});
//注意:您可能应该在此处返回整个结果,而不是结果[0]。子项[0]
返回结果;
}
让output=nestedMap([{title:'page1',子项:[{title:'page2',子项:[{title:'page4'}]},{title:'page3'}]},{title:'page5',子项:[]})

console.log(output)
另一种可能是编写更通用的
nestedMap
实现,然后向其传递一个添加属性的函数。我可以这样编写:

const nestedMap=(fn)=>(xs)=>
map({children,…rest})=>fn({
休息
…(儿童?{儿童:nestedMap(fn)(儿童)}:{})
}))
常量addProp=(键,值)=>(对象)=>
({…obj[key]:val})
const pages=[{title:'page1',子项:[{title:'page2',子项:[{title:'page4'}]},{title:'page3'}]},{title:'page5',子项:[]}]
控制台日志(
nestedMap(addProp('checked',false))(页面)

)
啊,我返回了那个结果,因为我在处理repl上的函数,看不到嵌套数组的内容。别担心,我还没有发疯!但非常感谢你,特别是你对所做更改的解释。它真的很有帮助:)。希望有一天它会点击。我又一次!知道我为什么会这样吗嵌套数组中是否有未定义的内容?@ZaladiN很高兴我能提供帮助!嗯,嵌套数组中哪里有未定义的
undefined
?嗯,所以当我console.log你的
输出
变量时,就可以了,例如
输出[0]。孩子们
。但是如果我console.log结果变量,我会得到
未定义的
结果[0].children
.Hey@ZaladiN如果您将
控制台.log(结果[0]。children)
放在
返回结果的上方;
,我希望您有时会得到
未定义的
,因为
nestedMap
会运行多次,有时参数
arr
有第一个元素
[0]
它没有
子属性