我有一个从转换后的CHANGELOG.md
文件中获取的列表,它看起来像这样:
["[3.0.0]","Features", "changes done in file","[2.0.1]", "Bug Fixes", "fixed login"]
我想要做的是将每个版本分成自己的列表,如下所示:
["[3.0.0]", "Features", "changes done in file"],
["[2.0.1]", "Bug Fixes", "fixed login"]
显然,因为它是一个更改日志,单个版本中可能有多个功能和多个错误修正,所以我想要一段代码来适当地分隔代码。
我尝试使用if (string.startsWith('['))
,但我无法设法将其放入循环中。
感谢任何帮助。
答案 0 :(得分:1)
这是我想出的一些东西。代码基本上遍历输入数组,并将每个字符串添加到currentArray变量。每次命中[
时,它都会将currentArray放入输出并清除currentArray。最后它删除了第一个元素,因为输出的第一个元素将始终是一个空数组(因为输入的第一个元素以[
开头)
var input = ["[3.0.0]","Features", "changes done in file","[2.0.1]", "Bug Fixes", "fixed login"];
var output = [];
var currentArray = [];
for (var i = 0; i < input.length; i++) {
if (input[i].charAt(0) == '[') {
output.push(currentArray);
currentArray = [];
}
currentArray.push(input[i]);
}
output.push(currentArray);
currentArray = [];
//Since it will take the first one, and put empty one, need to do last step.
output.splice(0, 1);
console.log(output);
// ["[3.0.0]", "Features", "changes done in file"],
// ["[2.0.1]", "Bug Fixes", "fixed login"]
&#13;
答案 1 :(得分:0)
假设你总是以三人一组的形式工作,这是一种快速而丑陋的方法
var data = ["[3.0.0]","Features", "changes done in file","[2.0.1]", "Bug Fixes", "fixed login"],
items = [];
data.map( (el, idx) => {
var last = items.length;
if( idx % 3 === 0 ) {
items.push( [] );
last += 1;
}
last = items[ last - 1 ];
last.push( el );
} );
console.log( JSON.stringify( items ) );
答案 2 :(得分:0)
如果您愿意,可以使用以下替代解决方案:
const arr = ["[3.0.0]","Features", "changes done in file","[2.0.1]", "Bug Fixes", "fixed login"];
const newArr = [];
let tempArr = [];
arr.forEach(function(v, i) {
if(/^\[\d+.\d+.\d\]$/.test(v) && i > 0) {
newArr.push(tempArr);
tempArr = [v];
} else {
tempArr.push(v)
}
});
newArr.push(tempArr);
console.log(newArr);
此代码段逐个循环浏览项目。它使用两个数组,一个用于保存最终结果,另一个用于填充当前版本的项目。
我正在使用正则表达式检查项目是否包含一个[
后跟一个数字,然后是句点,数字,句点,数字以及最后的]
。这允许非版本标记的其他字符串包含该字符。
如果当前项是版本标记,我们将tempArr
(包含我们之前在循环中填充的当前版本的更改)推送到结果数组newArr
。然后,我们清空tempArr
并为其指定下一个版本标记的起始值。
如果不是,我们只需将当前项目推送到临时数组。
答案 3 :(得分:0)
知道你是否可以保证以三元组格式获取这些数据会很有趣,正如你的例子所暗示的那样。如果您事先了解这一点,那么可能会出现许多创造性的解决方案。但是,对于仅创建2D数组,我喜欢这种方法(您可以直接在node.js中运行它来尝试它):
const original = ['[3.0.0]', 'Features', 'changes done in file', '[2.0.1]', 'Bug Fixes', 'fixed login']
function transformToChangeLog (originalArray) {
const changeLog = originalArray.reduce((newList, element) => {
element.charAt(0) === '[' // check for version string
? newList.push([element]) // If version string, then push a new Array containing that string
: newList[newList.length - 1].push(element) // If something else, tack it onto the last Array in the changelog list
return newList // whatever is returned in the reduce function is passed to the next iteration, allowing us to build this 2D array one element at a time.
}, [])
return changeLog
}
console.log(transformToChangeLog(original))
我希望有所帮助!我喜欢reduce
Array方法,因为它具有多功能性和简洁性。