**
交,差,并集,加减法
**
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);
};