你可以在javascript或jquery中从另一个数组中删除一个数组

leo*_*ora 3 javascript arrays jquery

我在javascript中有三个数组

var array1 = new Array (1,2,3,4,5);
var array2 = new Array ("a", "b", "c", "d", "e");
var array3 = new Array ("a", "c", "d");
Run Code Online (Sandbox Code Playgroud)

我基本上想要:

  1. 创建一个新数组,其中array2减去array3中的项目.所以它应该导致

    var array4 = new Array {"b","e"};

  2. 使用与数组4对齐的array1的相应索引创建另一个数组,所以在这种情况下我也希望能够生成

    var array5 = new Array {2,5}

我知道在dotnet 3.5中有很多简单的方法来执行此操作,但不确定javascript是否有类似的东西.

nic*_*ckf 9

好的,对于初学者来说,数组声明采用以下两种形式之一:

var myArr = new Array(1, 2, 3);
// or
var myArr = [1, 2, 3];
Run Code Online (Sandbox Code Playgroud)

第二种选择更好,顺便说一下.请看这里的原因.

你实际上寻找的东西叫做差异(与交叉或联合相对).Stack Overflow还有一些关于数组差异的问题,比如这个,但是接受的解决方案for .. in在数组上使用,这不是一个好主意.每当你这么做的时候,我听到道格克罗克福德在互联网上打了一拳.如果您有兴趣,这里有一个关于它的更多技术讨论.

这个问题的答案可能更适合你.


小智 6

使用Javascript 1.6 Array函数可以更简单:

Array.prototype.remove = function(set){return this.filter(
    function(e,i,a){return set.indexOf(e)<0}
)};
Array.prototype.mapTo = function(set,to){return this.map(
    function(e,i,a){return to[set.indexOf(e)]}
)};

var array1 = [1,2,3,4,5];
var array2 = ["a", "b", "c", "d", "e"];
var array3 = ["a", "c", "d"];

var array4 = array2.remove(array3);
var array5 = array4.mapTo(array2, array1);
Run Code Online (Sandbox Code Playgroud)