怎样比较两个数组的多的和少的

a[1,2,3,5,6]和b[1,2,4,6]怎样得出a的多的和a的少的

阅读 5.1k
7 个回答

求a有b没有:

a.filter(item => !b.includes(item))

求b有a没有:

b.filter(item => !a.includes(item))

通过您的问题分析,求数组a的多出的部分和a少出的部分,其实可以理解为求两数组的差集,可以用两种方法实现:

 Array.prototype.minus = function (arr) {
    var result = new Array();
    var obj = {};
    for (var i = 0; i < arr.length; i++) {
        obj[arr[i]] = 1;
    }
    for (var j = 0; j < this.length; j++) {
        if (!obj[this[j]])
        {
            obj[this[j]] = 1;
            result.push(this[j]);
        }
    }
    return result;
};
let a = [1, 2, 3, 5, 6];
let b = [1, 2, 4, 6];
// 获取数组a多出的部分
console.log(a.minus(b));
// 获取数组a少出的部分
console.log(b.minus(a));

如果您的项目中有使用es6语法,那就用楼上es6语法:

let a = [1, 2, 3, 5, 6];
let b = [1, 2, 4, 6];
// 获取数组a多出的部分
a.filter(item => !b.includes(item))
// 获取数组a少出的部分
b.filter(item => !a.includes(item))

希望对您有所帮助。

试试这个 array_diff,以及其相关的函数array_diff_assoc等

  • 将两个数组分别循环做键值反转,也就是a变成array("1"=>"","2"=>""...),b变成array("1"=>"",..."4"=>"")
  • 再次循环a,检查a的每个键key是否isset(b[key]),如果返回false,就是a的多的,如果返回true,就unset(b[key])
  • 再次循环b,检查b的每个键key是否isset(a[key]),如果返回false,就是a的少的

算法时间复杂度为O(n)

用Math.max和Math.min方法可以迅速得到结果

php比较的话简单点,js比较的话比较麻烦,最好写个函数来判断

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题