这是一个lodash链,它返回一个有序的,唯一排序的整数数组。由于输入不能完全受信任,因此存在中间验证(由于此示例中的thru方法)。如何改变这个例子以打破链流和返回?
_.mixin({
isIntegerString: function(arg) {
return /^\d+$/.test(arg);
}
});
var a = _.chain(" 54,32 ,6 ,32 ") // but param here can be anything so I have to do some checkings
.thru(function(untrusted) {return _.isString(untrusted) ? untrusted : ''}) // validation !
.split(',')
.map(_.trim)
.thru(function(array1) {return _.every(array1, _.isIntegerString) ? array1 : []}) // validation !
.map(_.parseInt)
.sortBy(function(e) {return e;})
.uniqBy(function(e) {return e;})
.value();
console.log(a);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.js"></script>
&#13;
答案 0 :(得分:1)
我担心你不能做你要求使用_.chain的东西。不过,我建议看看这个有趣的article关于_.chain和lodash。
按照本文的方法,当函数的结果为假时,可以使用函数组合和短路。我不知道lodash是否提供了内置的解决方案,我只是为了好玩而自己做了。当然,它只是解决问题的一种天真的方法,可以大大改进。
希望它有所帮助。
function checkIsString(untrusted) {
return _.isString(untrusted) ? untrusted : false;
}
function checkAreAllIntegers(array1) {
return _.every(function(arg) {
return /^\d+$/.test(arg);
})(array1) ? array1 : false;
}
function overEveryFnc() {
var arrFnc = _.toArray(arguments);
return function applyNextFncTo(args) {
var nextFnc = arrFnc.shift(),
partialRes;
return nextFnc && (partialRes = nextFnc(args)) ? applyNextFncTo(partialRes) : args;
};
}
var b = overEveryFnc(
checkIsString,
//_.tap(console.log),
_.split(','),
_.map(_.trim),
//_.tap(console.log),
checkAreAllIntegers,
_.map(_.parseInt(10)),
//_.tap(console.log),
_.sortBy(_.identity),
_.uniqBy(_.identity))(" 54,32 ,6 ,32 ");
console.log(b);
&#13;
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
&#13;