2016-12-01 2 views
1

Кто-то задал мне этот вопрос как проблему практики. Я должен использовать «_.reduce» на следующем объекте, чтобы напечатать текст «хорошая практика». Честно говоря, я боюсь даже представить это в моей голове. Любая помощь будет оценена по достоинству.используя сокращение на вложенном объекте

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

Спасибо!

+2

Добро пожаловать на SO - мы здесь, чтобы помочь, а не делать домашнее задание. Сначала попробуйте написать решение, а затем вернитесь, когда вы застрянете в определенном вопросе. – WillardSolutions

+1

его не моя домашняя работа и не для любого класса или вызова. Это была просто практическая проблема, которую дал мне мой друг. И я занялся этим 48 часов. когда все остальное провалилось, я направляюсь сюда. –

ответ

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));

Смежные вопросы