![]() |
威武的水桶 · 纵置后驱平台-福特探险者昆仑巅峰版-福特汽车 ...· 12 月前 · |
![]() |
想发财的遥控器 · 生物类本科:选择生物相关专业的本科生应该具备 ...· 1 年前 · |
![]() |
侠义非凡的大象 · 词典笔选购方法?有道哪个型号的词典笔速度最合 ...· 1 年前 · |
![]() |
大鼻子的镜子 · 郭艾伦落选国家队真因曝光,乔帅果然留一手,难 ...· 1 年前 · |
![]() |
热情的签字笔 · 关于曾经的神鸟“凤凰”,你知道多少它的传说- 知乎· 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]);