我想使用下划线来迭代每个项目,并在每个水果名称的末尾附加一个句点,然后返回一个数组。但是可以有许多嵌套级别。
`const` `NESTED =` `[
{name: 'Apple',
items: [{
name: 'Orange',
items: [{name: 'Banana'}]
}]},
{name: 'Pear'}]`
我的决赛应该是这样的:
`NESTED =` `[{ name: 'Apple.', items: [{name: 'Orange.', items: [{name: 'Banana.'}]}]}, { name: 'Pear.'}]`
其中可能有很多项目。这是我被卡住的地方,我当前的下划线函数只使用._map:
获得第一级let items = _.map(NESTED, function(item){
return {
// append the period here, but doesn't go deeper
}
});
这样做的好方法是什么?
答案 0 :(得分:0)
快速尝试
var findMyChildren = function(this, parent){
if(parent !== null){
this[name] = child[name] + '.';
}
if(child[items] !== null){
for(var i=0;i<child[items].length;i++){
var child = this[items][i];
findMyChildren(child, this);
}
}
};
答案 1 :(得分:0)
答案已经在looping through arrays of arrays
var printArray = function(arr) {
if ( typeof(arr) == "object") {
for (var i = 0; i < arr.length; i++) {
printArray(arr[i]);
}
}
else document.write(arr);
}
printArray(parentArray);
答案 2 :(得分:0)
这适用于您提供的示例数据。
var pre = document.getElementById('out'),
NESTED = [{
name: 'Apple',
items: [{
name: 'Orange',
items: [{
name: 'Banana'
}]
}]
}, {
name: 'Pear'
}];
function recurse(arr) {
var res = arr.map(function (item) {
return Object.keys(item).reduce(function (acc, key) {
if (key === 'name') {
acc[key] = item[key] + '.';
} else if (key === 'items') {
acc[key] = recurse(item[key]);
}
return acc;
}, {});
});
return res;
}
pre.textContent = 'New\n\n';
pre.textContent += JSON.stringify(recurse(NESTED), null, 2) + '\n\n';
pre.textContent += 'Original\n\n';
pre.textContent += JSON.stringify(NESTED, null, 2);
<pre id="out"></pre>
应该很容易将纯JS转换为下划线。
更新:直接转换为下划线
var pre = document.getElementById('out'),
NESTED = [{
name: 'Apple',
items: [{
name: 'Orange',
items: [{
name: 'Banana'
}]
}]
}, {
name: 'Pear'
}];
function recurse(arr) {
var res = _.map(arr, function (item) {
return _.reduce(_.keys(item), function (acc, key) {
if (key === 'name') {
acc[key] = item[key] + '.';
} else if (key === 'items') {
acc[key] = recurse(item[key]);
}
return acc;
}, {});
});
return res;
}
pre.textContent = 'New\n\n';
pre.textContent += JSON.stringify(recurse(NESTED), null, 2) + '\n\n';
pre.textContent += 'Original\n\n';
pre.textContent += JSON.stringify(NESTED, null, 2);
<script src="http://underscorejs.org/underscore-min.js"></script>
<pre id="out"></pre>