有人给我提供了这个练习问题。我需要在以下对象上使用“_.reduce”来打印出文本“a good practice”。老实说,我甚至很难在脑海中想象这个过程。任何帮助都将不胜感激。
var test = {a:'a',b:{a:'good',c:{c:'practice'}}}
谢谢!
有人给我提供了这个练习问题。我需要在以下对象上使用“_.reduce”来打印出文本“a good practice”。老实说,我甚至很难在脑海中想象这个过程。任何帮助都将不胜感激。
var test = {a:'a',b:{a:'good',c:{c:'practice'}}}
谢谢!
由于您不知道对象的嵌套层数,因此需要使用递归来完成手头的任务。您无法在对象本身上使用.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));