我的文件格式如下所示。
'这是评论 #方法1
XQ#1234
结束
#方法2
XR#1234
HR#9620
END
我的目标是大块,但是展望END
的每个实例。
var instructions = _(fs.readdirSync(filepath))
.filter((file) => _.endsWith(file, '.assembly'))
.map((filename) => fs.readFileSync(path.join(filepath, filename)).toString('ascii').split('\n'))
.flatten()
.reject((str) => /^\s*$|^[\\\'\"].*/g.test(str))
// ^ the contents of the files with the comments and blank lines removed.
// here is where I get lost
.chunk( /** ??? */ )
最终目标是拥有这样的东西:
[ ['XQ#1234'], ['XR#1234', 'HR#9620'] ]
我遇到的主要问题是根据“END”的每个实例对数组进行分块,而不是使用两个分隔符(例如BEGIN
和END
)。我认为必须使用_.findIndex
来帮助解决这个问题。
如何根据lodash中的结束分隔符对字符串的出现进行分块?
答案 0 :(得分:1)
您正在寻找分割功能:
_.mixin({"split": function(arr, f) {
return _.reduce(arr, function(r, x) {
if(f(x)) {
r.push([]);
} else {
r[r.length - 1].push(x)
}
return r;
}, [[]]);
}});
并像这样使用它:
var instructions = _(fs.readdirSync(filepath))
.filter((file) => _.endsWith(file, '.assembly'))
.map((filename) => fs.readFileSync(path.join(filepath, filename)).toString('ascii').split('\n'))
.flatten()
.reject((str) => /^\s*$|^[\\\'\"].*/g.test(str))
.split((str) => "END" == str)
或者如果你不想在lodash上添加一个新的mixin:
...
.reject((str) => /^\s*$|^[\\\'\"].*/g.test(str))
.reduce(function(r, x) {
if("END" == x) {
r.push([]);
} else {
r[r.length - 1].push(x)
}
return r;
}, [[]]);