首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在JavaScript中得到两个数组之间的差异?

如何在JavaScript中得到两个数组之间的差异?
EN

Stack Overflow用户
提问于 2009-07-27 18:38:50
回答 60查看 844K关注 0票数 1K

有没有办法在JavaScript中返回两个数组之间的差值?

例如:

代码语言:javascript
运行
复制
var a1 = ['a', 'b'];
var a2 = ['a', 'b', 'c', 'd'];

// need ["c", "d"]
EN

Stack Overflow用户

发布于 2010-08-13 20:07:33

我想要一个类似的函数,它接受一个旧的数组和一个新的数组,并给我一个添加项的数组和一个删除项的数组,我希望它是高效的(所以没有.contains!)。

您可以在这里试用我提出的解决方案:http://jsbin.com/osewu3/12

有人能看到该算法的任何问题/改进吗?谢谢!

代码清单:

代码语言:javascript
运行
复制
function diff(o, n) {
  // deal with empty lists
  if (o == undefined) o = [];
  if (n == undefined) n = [];

  // sort both arrays (or this won't work)
  o.sort(); n.sort();

  // don't compare if either list is empty
  if (o.length == 0 || n.length == 0) return {added: n, removed: o};

  // declare temporary variables
  var op = 0; var np = 0;
  var a = []; var r = [];

  // compare arrays and add to add or remove lists
  while (op < o.length && np < n.length) {
      if (o[op] < n[np]) {
          // push to diff?
          r.push(o[op]);
          op++;
      }
      else if (o[op] > n[np]) {
          // push to diff?
          a.push(n[np]);
          np++;
      }
      else {
          op++;np++;
      }
  }

  // add remaining items
  if( np < n.length )
    a = a.concat(n.slice(np, n.length));
  if( op < o.length )
    r = r.concat(o.slice(op, o.length));

  return {added: a, removed: r}; 
}
票数 3
EN
查看全部 60 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1187518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档