问题:把整数12345转换为54321。
步骤
1.number转为string '12345'
const numberTostring = (n) => {
//flag表示当前这个数是不是负数
let flag = false;
if (n < 0) {
n = -n;
flag = !flag;
}
else if(n === -0 && 1/n === -Infinity){
flag = !flag;
}
return [n + "", flag];
};
2.string转为array ['1','2','3','4','5']
const stringToArray = ([n, flag]) => [n.split(""), flag];
3.交换数组元素 ['5','4','3','2','1']
const swap = ([n, flag]) => {
let t;
for (let i = 0; i < n.length / 2; i++) {
[n[i],n[n.length -1 -i]] = [n[n.length -1 -i],n[i]];
}
return [n, flag];
};
4.array转为string '54321'
const arrayToString = ([n, flag]) => [n.join(""), flag];
5.string串转为number 54321
const stringToNumber = ([n, flag]) => flag ? -+n : +n;
6.通过lodash/fp生成组合函数compose
const compose = fp.flowRight(
stringToNumber,
arrayToString,
swap,
stringToArray,
numberTostring
);
7.导出compose函数
module.exports ={
compose
}
8.通过jest测试compose函数
const {compose} = require('./demo13');
describe('number reverse',()=>{
test('sample 1',()=>{
expect(compose(123456)).toBe(654321);
});
test('sample 2',()=>{
expect(compose(-123456)).toBe(-654321);
});
test('sample 3',()=>{
expect(compose(-1)).toBe(-1);
});
test('sample 4',()=>{
expect(compose(-12)).toBe(-21);
});
test('sample 5',()=>{
expect(compose(0)).toBe(0);
});
test('sample 6',()=>{
expect(compose(-0)).toBe(-0);
});
})