189 8069 5689

javascript交集,两个数组的交集js

javascript中,对于元素是对象的数组,用underscore取不到交集?为什么?

原因是:

成都创新互联-专业网站定制、快速模板网站建设、高性价比兰山网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式兰山网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖兰山地区。费用合理售后完善,十年实体公司更值得信赖。

intersection求交集不是深比较,

所以只能传递基本类型的数据,不能传递对象作为参数。

有了这个方法就可以实现取对象的交集了。

function isDate(value) {

return Object.prototype.toString.call(value) === '[object Date]';

}

function isRegExp(value) {

return Object.prototype.toString.call(value) === '[object RegExp]';

}

function isFunction(value) {

return typeof value === 'function';

}

function equals(o1, o2) {

if (o1 === o2) return true;

if (o1 === null || o2 === null) return false;

var t1 = typeof o1, t2 = typeof o2, length, key, keySet;

if (t1 == t2) {

   if (t1 == 'object') {

       if (Array.isArray(o1)) {

           if (!Array.isArray(o2)) return false;

           if ((length = o1.length) == o2.length) {

               for (key = 0; key length; key++) {

                   if (!equals(o1[key], o2[key])) return false;

               }

               return true;

           }

       } else if (isDate(o1)) {

           if (!isDate(o2)) return false;

           return equals(o1.getTime(), o2.getTime());

       } else if (isRegExp(o1) isRegExp(o2)) {

           return o1.toString() == o2.toString();

       } else {

           //if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || Array.isArray(o2)) return false;

           keySet = {};

           for (key in o1) {

               if (key.charAt(0) === '$' || isFunction(o1[key])) continue;

               if (!equals(o1[key], o2[key])) return false;

               keySet[key] = true;

           }

           for (key in o2) {

               if (!keySet.hasOwnProperty(key)

                   key.charAt(0) !== '$'

                   o2[key] !== undefined !isFunction(o2[key])) return false;

           }

           return true;

       }

   }

}

return false;

}

function intersection(array) {

var result = [];

var argsLength = arguments.length;

for (var i = 0; i argsLength; i++) {

   var item = array[i];

   if (contains(result, item)) continue;

   for (var j = 1; j argsLength; j++) {

       if (!contains(arguments[j], item)) break;

   }

   if (j === argsLength) result.push(item);

}

return result;

}

function contains(obj, target) {

if (obj == null) return false;

var flag = false;

for (var i = 0; i obj.length; i++) {

   if (equals(obj[i], target)) {

       flag = true;

   }

}

return flag;

}

var a = [{name: 'huge', age: 23}, {name: 'lee', age: 24}];

var b = [{name: 'huge', age: 23}, {name: 'd', age: 24}];

var c = intersection(a, b);

console.log(c);

可以根据需要自行删减代码。

在 JavaScript 中,如何求出两个数组的交集和差集?

相同的a.filter(function(v){returnb.indexOf(v)-1})不同的 a.filter(function(v){ return !(b.indexOf(v) -1) }).concat(b.filter(function(v){ return !(a.indexOf(v) -1)}))

JS怎么判断出两个DIV块是否有交集

最小的y坐标或者最大的y坐标是否在另一个div的俩y坐标之间,

最小的x坐标或者最大的x坐标是否在另一个x坐标之间,

列如:

div1={x11,x12,y11,y12}

div2={x21,x22,y21,y22}

if(((x21x11x11x22)||(x21x12x12x22))((y21y11y11y22)||(y21y12y12y22))){

console.log(有交集);

}

这个是很笨的方法,,希望你有更好的思路


当前名称:javascript交集,两个数组的交集js
链接分享:http://jkwzsj.com/article/dsdiogo.html

其他资讯