逆袭的芒果 · Bootstarp日期控件-datetime ...· 4 月前 · |
憨厚的课本 · editor.md显示编辑框及图片上传心得( ...· 1 年前 · |
正直的酸菜鱼 · js模拟键盘某个键按下_教你认识电脑键盘上的 ...· 1 年前 · |
我希望使用下划线来迭代每个项目,并在每个水果名称的末尾追加一个句点,并返回一个数组。但是可以有许多嵌套级别。
`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
});
做这件事的好方法是什么?
发布于 2015-06-16 21:09:01
这对于您提供的示例数据应该有效。
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>
发布于 2015-06-16 20:25:10
只是一次快速的尝试
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);
};
发布于 2015-06-16 20:51:11
答案已经在这里了, looping through arrays of arrays
var printArray = function(arr) {
if ( typeof(arr) == "object") {
for (var i = 0; i < arr.length; i++) {
printArray(arr[i]);