交,差,并集,加减法

1 篇文章 0 订阅
1 篇文章 0 订阅

**

交,差,并集,加减法

**

var crypto = require("crypto");
/**
 *  方法名 :array_remove_repeat
 *  作  用 :去重
 *  @param :
 *  @return:
 *  @date  :2016年11月3日
 */
function array_remove_repeat(a) { //去重
    var r = [];
    for(var i = 0; i < a.length; i++) {
        var flag = true;
        var temp = a[i];
        for(var j = 0; j < r.length; j++) {
            if(temp === r[j]) {
                flag = false;
                break;
            }
        }
        if(flag) {
            r.push(temp);
        }
    }
    return r;
};
/**
 *  方法名 :arrayOperation
 *  作  用 :交集
 *  @param :
 *  @return:
 *  @date  :2016年11月3日
 */
exports.arrayOperation = function() {
    var len = arguments.length;
    var res = [],
        commonArr = [],
        intersection = [];
    for(var i = 0; i < len; i++) {
        if(arguments[i].length == 0) {
            return intersection;
        }
        Array.prototype.push.apply(res, uniqueArray(arguments[i]));
    }
    for(var i = 0; i < res.length; i++) {
        var count = 0;
        for(var j = i; j < res.length; j++) {
            if(res[i] == res[j]) {
                count++;
            }

        }
        commonArr.push([res[i], count]);
    }
    for(var i = 0; i < commonArr.length; i++) {
        if(commonArr[i][1] === len) {
            intersection.push(commonArr[i][0]);
        }
    }
    return intersection;
}

function uniqueArray(data) { //去除数组里相同的数
    data = data || [];
    var a = {};
    for(var i = 0; i < data.length; i++) {
        var v = data[i];
        if(typeof(a[v]) == 'undefined') {
            a[v] = 1;
        }
    };
    data.length = 0;
    for(var i in a) {
        data[data.length] = i;
    }
    return data;
}

/**
 *  方法名 :sum
 *  作  用 :并集
 *  @param :
 *  @return:
 *  @date  :2016年11月3日
 */
exports.sum = function(a, b) { // 并集   
    return array_remove_repeat(a.concat(b));
};
/**
 *  方法名 :set
 *  作  用 :差集
 *  @param :
 *  @return:
 *  @author:zkz
 *  @date  :2016年11月3日
 */
exports.set = function(arr1, arr2) {
        var arr3 = [];
        for(var i = 0; i < arr1.length; i++) {
            var flag = true;
            for(var j = 0; j < arr2.length; j++) {
                if(arr2[j] == arr1[i]) {
                    flag = false;
                }
            }
            if(flag) {
                arr3.push(arr1[i]);
            }
        }
        return arr3;
    }
    /**
     *  方法名 :accAdd
     *  作  用 :加法运算
     *  @param :
     *  @return:
     *  @date  :2016年11月3日
     */
exports.accAdd = function(arg1, arg2) {
        if(arg1 < 0) {
            var c;
            c = arg1;
            arg1 = arg2;
            arg2 = c;
        } else {}
        var r1, r2, m, c;
        try {
            r1 = arg1.toString().split(".")[1].length;
        } catch(e) {
            r1 = 0;
        }
        try {
            r2 = arg2.toString().split(".")[1].length;
        } catch(e) {
            r2 = 0;
        }
        c = Math.abs(r1 - r2);
        m = Math.pow(10, Math.max(r1, r2));
        if(c > 0) {
            var cm = Math.pow(10, c);
            if(r1 > r2) {
                arg1 = Number(arg1.toString().replace(".", ""));
                arg2 = Number(arg2.toString().replace(".", "")) * cm;
            } else {
                arg1 = Number(arg1.toString().replace(".", "")) * cm;
                arg2 = Number(arg2.toString().replace(".", ""));
            }
        } else {
            arg1 = Number(arg1.toString().replace(".", ""));
            arg2 = Number(arg2.toString().replace(".", ""));
        }
        return(arg1 + arg2) / m;
    }
    /**
     *  方法名 :Subtr
     *  作  用 :减法运算
     *  @param :
     *  @return:
     *  @date  :2016年11月3日
     */
exports.Subtr = function(arg1, arg2) { //减法运算
    var r1, r2, m, n;
    try {
        r1 = arg1.toString().split(".")[1].length;
    } catch(e) {
        r1 = 0;
    }
    try {
        r2 = arg2.toString().split(".")[1].length;
    } catch(e) {
        r2 = 0;
    }
    m = Math.pow(10, Math.max(r1, r2));
    //last modify by deeka
    //动态控制精度长度
    n = (r1 >= r2) ? r1 : r2;
    return((arg1 * m - arg2 * m) / m).toFixed(n);
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值