如何将数组中同label对象的options值合并为目标格式字符串?
实现按Label合并Options并生成指定格式字符串
需求:将数组中相同label对应的options值合并,生成如下格式的字符串:
my Label 1 AA BB CC Other Label XX ZZ
现有数据:
let data = [ { label: "my Label 1", id: 1, options: [ { id: 1, value: "AA" }, { id: 2, value: "BB" }, { id: 3, value: "CC" } ] }, { label: "Other Label", id: 2, options: [ { id: 3, value: "XX" }, { id: 4, value: "ZZ" } ] } ]
你当前的代码会把每个option和对应label拆成对象再扁平化,但这不是目标格式。可以通过以下方式直接生成目标字符串:
方法一:遍历拼接字符串
// 初始化结果数组,存储每个label块的内容 let result = []; data.forEach(section => { // 添加当前label result.push(section.label); // 添加该label下所有options的value section.options.forEach(option => { result.push(option.value); }); // 每个label块之间加空行(最后一个块后不加) if (data.indexOf(section) !== data.length - 1) { result.push(''); } }); // 将数组转为换行分隔的字符串 let output = result.join('\n'); console.log(output);
方法二:使用map和join简化代码
let output = data.map(section => { // 把label和对应values用换行拼接成单个块 return `${section.label}\n${section.options.map(opt => opt.value).join('\n')}`; // 所有块之间用空行(两个换行)分隔 }).join('\n\n'); console.log(output);
两种方法都会输出符合要求的格式:
my Label 1 AA BB CC Other Label XX ZZ
内容的提问来源于stack exchange,提问作者Einarr
相关产品推荐
相关产品推荐

