在嵌套对象上使用reduce

时间:2016-12-01 21:07:13

标签: javascript reduce

有人把这个问题作为一个练习题。我必须使用" _。减少"在下面的对象上打印出文本"一个好的做法"。坦率地说,我甚至在脑海中想象这一点。任何帮助,将不胜感激。

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

谢谢!

1 个答案:

答案 0 :(得分:1)

因为您不知道对象是如何嵌套的,所以您需要使用递归来完成手头的任务。您无法在对象本身上使用.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));




相关问题