js 中常用工具函数收录

110 阅读1分钟

1. 解决js中小数相加损失精度的问题

function add(){
    var args = arguments,//获取所有的参数
        lens = args.length,//获取参数的长度
        d = 0,//定义小数位的初始长度,默认为整数,即小数位为0
        sum = 0,//定义sum来接收所有数据的和
    //循环所有的参数
    for(var key in args){//遍历所有的参数
        //把数字转为字符串
        var str = ""+args[key];
        if(str.indexOf(".")!=-1){//判断数字是否为小数
            //获取小数位的长度
            var temp = str.split(".")[1].length;
            //比较此数的小数位与原小数位的长度,取小数位较长的存储到d中
            d = d < temp ? temp : d;
        }
    }
    //计算需要乘的数值
    var m = Math.pow(10,d);
    //遍历所有参数并相加
    for(var key in args){
        sum += args[key]*m;
    }
    //返回结果
    return sum/m;

}
console.log(add(0.1,0.2));//0.3
console.log(add(0.1,0.7));//0.8

2. 数组交集并集的问题

  • 数组对象
let a=[{id:1,a:123,b:1234},{id:2,a:123,b:1234}];
let b=[{id:1,a:123,b:1234},{id:2,a:123,b:1234},{id:3,a:123,b:1234},{id:4,a:123,b:1234}];

- 交集
let arr = [...b].filter(x => [...a].some(y => y.id === x.id));
console.log('arr',arr)

- 差集
let arr = [...b].filter(x => [...a].every(y => y.id !== x.id));
console.log('arr',arr);
  • 基本的数组
let a = new Set([123]);
let b = new Set([432]);

- 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}

- 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}

- 差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}