在嵌套对象上使用 reduce

3

有人给我提供了这个练习问题。我需要在以下对象上使用“_.reduce”来打印出文本“a good practice”。老实说,我甚至很难在脑海中想象这个过程。任何帮助都将不胜感激。

var test = {a:'a',b:{a:'good',c:{c:'practice'}}}

谢谢!


2
欢迎来到SO - 我们在这里提供帮助,而不是代替你完成作业。请先尝试自己编写解决方案,当你在特定问题上遇到困难时再回来寻求帮助。 - WillardSolutions
3
这不是我的作业,也不是为了任何课程或挑战。这只是我朋友给我的一个练习问题。我已经尝试解决它了48个小时,当其他所有方法都失败时,我来到这里。 - user7238321
1个回答

3

由于您不知道对象的嵌套层数,因此需要使用递归来完成手头的任务。您无法在对象本身上使用.reduce,因此必须使用Object.keys从对象中获取属性数组。然后,您可以对返回的数组使用.reduce

var test = {a:'a',b:{a:'good',c:{c:'practice'}}};
var deeperTest = {a:'a',b:{a:'deeper',b:{a:'test',b:{a:'than',b:{a:'before'}}}}};

function reducer(obj) {
  if (typeof obj != 'object') return ''; //we only want to reduce 'objects'
  return Object.keys(obj).reduce(function(prev, curr) {
    if (typeof obj[curr] != 'string')
      prev += ' ' + reducer(obj[curr]); //probably an object - let's dig in
    else
      prev += ' ' + obj[curr]; //just a string - append to accumulator
    return prev;
  }, "");  
}

console.log(reducer(test));
console.log(reducer(deeperTest));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接