你可以在javascript或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");
我基本上想要:
-
创建一个新数组,其中array2减去array3中的项目。 所以它应该导致
var array4 = new Array {“b”,“e”};
-
使用与数组4对齐的array1的相应索引创建另一个数组,因此在这种情况下我还希望能够生成
var array5 = new Array {2,5}
我知道在dotnet 3.5中有很多简单的方法来执行此操作,但不确定javascript是否有类似的东西。
好的,对于初学者来说,数组声明采用以下两种forms之一:
var myArr = new Array(1, 2, 3); // or var myArr = [1, 2, 3];
第二种选择更好,顺便说一下。 请看这里的原因 。
你实际上寻找的东西叫做差异(与交叉或联合相对)。 关于arrays差异的Stack Overflow还有一些其他问题, 比如这个问题 ,但是接受的解决方案for .. in
数组中for .. in
,这不是一个好主意。 每当你这样做的时候,我听到道格克罗克福德通过互联网从字面上打了你一拳。 如果您有兴趣, 这里有一个关于它的更多技术讨论 。
这个问题的答案可能更适合你。
使用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);
使用jQuery:
var array4 = $.grep(array2, function(n, i){ return $.inArray(n, array3) == -1; });
对于纯JavaScript,请参阅以下问题:
- Javascript数组差异
- 使用Javascript数组计算集合差异的最快或最优雅的方法是什么?
一个非常简短有效的方法是使用:
_.difference(array1,array2)
我建议实施这些: http : //www.dustindiaz.com/sugar-arrays/
使数组工作变得更加容易。 您的问题的解决方案将如下所示:
var array1 = [1, 2, 3, 4, 5], array2 = ["a", "b", "c", "d", "e"], array3 = ["a", "c", "d"], array5 = [], array4 = array2.filter(function(item, i) { var ok = array3.indexOf(item) === -1; if (ok) { array5.push(i + 1); } return ok; }); alert(array4); alert(array5);
仅当array2和array3只有字符串或数字时,此解决方案才有效。
步骤1.将array3转换为具有属性的对象(以便更快地查找)
var obj = {}, i; for(i=0;i
第2步:循环遍历array2,只获取不在array3中的元素
var array4 = [], array5 = []; for(i=0; i
javascript是一种紧凑的语言,按设计。
如果您没有库,并希望在大多数浏览器中使用方便的方法,则需要编写一些代码。
Array.prototype.lastIndex= function(what){ var L= this.length; while(L){ if(this[--L]=== what) return L; } return -1; } Array.prototype.remove= function(arg){ var what, L= arg.length, ax; while(L && this.length){ what= arg[--L]; while((ax= this.lastIndex(what))!= -1){ this.splice(ax, 1); } } return this; } var array2 = ["a", "b", "c", "d", "e"], array3 = ["a", "c", "d"]; alert(array2.remove(array3))
Underscore.js包含差异和地图方法以简化:
var array4 = _.difference(array2, array3); var array5 = _.map(array4, function(i){ return array1[array2.indexOf(i)] });
这对我有帮助:
var a = [1, 2, 3, 4]; var b = [2, 3, 4, 5]; var c = _.without.apply(_, [a].concat(b));
Result: c = [1]