2017-03-17 10 views
1

希望这个问题能达到SO的标准。我从来没有发布过,但在寻找一些关于接近我已被分配的任务的信息。方法学方法 - json字符串/输出

我有一个网页表单的信息,一些简单的领域,我已经有了打算。

页输出表单字段的JSON字符串,并将其写入到一个文本文件中。

我需要做的是使用的关键是:值,以填补在bash脚本输出到hotfolder中摄取到生产环境中。

的“addmore”阵列需要确定产生的文件名的字段的数量。我应该补充说这是动态的,“addmore”数组可能包含1个条目,或者在技术上可以包含无限数量。但是这个数字会波动。

JSON输出:

{"formatcode":"JFM","serialnumber":"555","callletters":"555","rotator":"555","addmore":["555","444","333",""]}

如何使用关键:值对输出到这个文件象下面这样:

{"type":"sequential","items":[ 
    {"filename": "/assets/$formatcode/$serialnumber/$addmore1", "description":"First item"}, 
    {"filename": "/assets/$formatcode/$serialnumber/$addmore2", "description": "Second item"}, 
    {"filename": "/assets/$formatcode/$serialnumber/$addmore3", "description": "Third item"} 
]} 
+0

描述为动态且必要的吗?不知道如果没有1:“First”的地图,一直到可能的输入的最大数量,您将如何生成这些数据。 “项目1”,“项目2”会简单得多 –

+0

好点 - 没有说明不重要。它不是动态的,可以保持任何东西。 – fcamp

+0

'addmore'是一个数组,你想使用什么值?你怎么知道你想要生成3行? Imo最好的方法是不要在这里寻找一个通用的解决方案,而是写一个接受对象并返回这个输出的小函数。 – Thomas

回答

0

这应该做的伎俩,我使用ES6字符串模板创建动态文件名和说明。最终的目标应该有addmore.lengthitems,所以我们基于data.addmore减少,创建基本对象作为出发点({ type: "sequential", items: [] })和推动态字符串为output.items在每次迭代。

const data = { 
    "formatcode":"JFM", 
    "serialnumber":"555", 
    "callletters":"555", 
    "rotator":"555", 
    "addmore":[ 
     "555", 
     "444", 
     "333", 
    ] 
}; 

const desiredOutput = data.addmore.reduce((p, c, index) => { 
    p.items.push({ 
     filename: `/assets/${data.formatcode}/${data.serialnumber}/${c}`, 
     description: `Item ${index + 1}` 
    }); 
    return p; 
}, { 
    type: "sequential", 
    items: [] 
}); 

console.log(desiredOutput); 

如果没有可用的ES6做,你可以把箭头功能为常规功能,并使用+毗连运算,而不是字符串模板。

+0

这看起来非常接近我所需要的 - 我会稍微测试并回复你,但这看起来很完美,我相信我完全理解你在这里做的是什么。 – fcamp

+1

你为什么使用reduce?地图不简单吗? 'var desiredOutput = {type:“sequential”,items:data.addmore.map((more,index)=>({...}))}' – Thomas

+0

@Thomas我使用'reduce',因为我减少了一个形式到另一个,我觉得它更习惯。你的“地图”方法同样很好,它们在性能方面可能相同。至于“简单”,我认为这取决于开发者对“简单”的定义;我不会将任何解决方案定义为“复杂”。 –