在两个数组之间进行更改的算法

Ian*_*ger 15 javascript arrays algorithm performance

我需要创建一个算法,它将(有效地)获取一个旧数组和一个新数组,并让我回复两者之间的变化(添加了哪些项目,删除了哪些项目).它恰好需要使用JavaScript(在浏览器中运行),但算法比语言更重要.

这就是我提出的:http://jsbin.com/osewu3/13.任何人都可以看到任何问题/建议任何改进?

谢谢!

代码清单:

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}; 
}
Run Code Online (Sandbox Code Playgroud)

(我还发布了这个作为另一个SO问题的潜在解决方案,这里:JavaScript数组差异)

Ale*_*lex 0

下一页有一个函数,可以从一个数组中删除另一个数组,并可用于为您提供 2 个值。 使用RemoveArrayItems()从JavaScript数组中删除项目

var newItemsAdded=RemoveArrayItems(oldArray,newArray);
var ItemsRemoved =RemoveArrayItems(newArray,oldArray);
Run Code Online (Sandbox Code Playgroud)

  • 该链接似乎已失效 (7认同)