JavaScript-用Javascript计算数组差集算法

JavaScript-用Javascript计算数组差集算法

瑾兮 发布于 2017-05-10 字数 450 浏览 1088 回复 5

现在有两个Javascript数组, 计算两个数组的差集。
求一算法,能够满足数组元素在一万左右

// Javascript代码
var array1 = [3,4,5,96,7,8];
var array2 = [1,2,3,4,5,6];

//假设函数为array_diff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值

result1 = array_diff(array1, array2); //返回结果 96, 7, 8
result2 = array_diff(array2, array1); //返回结果 1, 2, 6

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

偏爱自由 2017-11-01 5 楼

你看下这个大牛的,总结的很全
http://hi.baidu.com/zz_zh/blog/item/d2a255e6aee46623b93820f6.html

偏爱自由 2017-10-02 4 楼

function array_diff(array1, array2) {
var o = {};//转成hash可以减少运算量,数据量越大,优势越明显。
for(var i = 0, len = array2.length; i < len; i++) {
o[array2[i]] = true;
}

var result = [];
for(i = 0, len = array1.length; i < len; i++) {
var v = array1[i];
if(o[v]) continue;
result.push(v);
}
return result;
}
var array1 = [3,4,5,96,7,8];
var array2 = [1,2,3,4,5,6];
alert(array_diff(array1, array2));//96,7,8
alert(array_diff(array2, array1));//1,2,6

归属感 2017-09-01 3 楼

刚才自己写了一个,你运行直接看看,看符合你要求不:

 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh" dir="ltr">
<script type="text/javascript">
var arr1 = [3,4,5,96,7,8];
var arr2 = [1,2,3,4,5,6];
var arr3 = new Array();
function test(){
for(var i=0; i < arr1.length; i++){
var flag = true;
for(var j=0; j < arr2.length; j++){
if(arr1[i] == arr2[j])
flag = false;
}
if(flag)
arr3.push(arr1[i]);
}
alert("差集:"+arr3.toString());
}
</script>
<body>
<a href="" onclick="test()">test</a>
</body>
</html>

泛泛之交 2017-08-15 2 楼

 function array_diff (arr1) {
var retArr = [],argl = arguments.length,k1 = '',i = 1,k = '',arr = {};
arr1keys: for (k1 in arr1) {
for (i = 1; i < argl; i++) {
arr = arguments[i];
for (k in arr) {
if (arr[k] === arr1[k1]) {
// If it reaches here, it was found in at least one array, so try next value
continue arr1keys;
}
}
retArr.push(arr1[k1]);
}
}

return retArr;
}

var array1 = [3,4,5,96,7,8];
var array2 = [1,2,3,4,5,6];
alert(array_diff(array1,array2));
alert(array_diff(array2,array1));

参考http://phpjs.org/functions/array_diff/

瑾兮 2017-05-23 1 楼

 var getArr = function (a, b) {
var arr = [], i;
for (i = a; i < b; i++) {
arr.push(i);
}
return arr;
},
diff_array = function (a, b) {
var diff = [], _b = {}, i, len;
for (i = 0, len = b.length; i < len; i++) {
_b[b[i]] = true;
}
for (i = 0, len = a.length; i < len; i++) {
if (!(a[i] in _b)) {
diff.push(a[i]);
}
}
return diff;
}
arr1 = getArr(1, 10000),
arr2 = getArr(5000, 15000);

console.time('diff_array');
var d = diff_array(arr1, arr2);
console.timeEnd('diff_array');
console.log(d);

下面是运算结果: