从AngularJS中的数组中删除项目

时间:2015-08-30 07:51:25

标签: javascript angularjs

我有两个整数数组: 我正在研究我的Angularjs教程项目。

在控制器中我有两个数组:

var arrA=[12,54,76,98,45];
var arrB=[12,98];

我需要从 arrA 中删除 arrB 内的所有数字。

实施后

arrA 必须如此:

arrA=[54,76,45]

在angularjs中实现它的最佳和最优雅的方法是什么?

5 个答案:

答案 0 :(得分:3)

您可以将Array.prototype.filter()Array.prototype.indexOf()

结合使用
  

filter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。

     

indexOf()方法返回可在数组中找到给定元素的第一个索引,如果不存在则返回-1。

var arrA=[12,54,76,98,45];
var arrB=[12,98];

arrA = arrA.filter(function(o){
  return arrB.indexOf(o) == -1;
  });

document.write(JSON.stringify(arrA));

答案 1 :(得分:1)

脱离我的头顶。

//Run a loop to go through all elements in arrB
for (var i=0;i<arrB.length;i++) {
   //keep position of element i in arrA
   //if it's not there index will be equal to -1
   var index=arrA.indexOf(arrB[i])
   //if it is there
   if(index!=-1) {
   //remove 1 element at position index from arrA
    arrA.splice(index,1)
   }
}
祝你好运。 这与angular btw无关,它是基本的javascript。

这是一个小提琴: https://jsfiddle.net/MichaelSel/t2dfg31c/

答案 2 :(得分:1)

Angular并不关心数组操作等问题。 JavaScript为此提供了设施:

var diff = arrA.filter(function(item) {
    return arrB.indexOf(item) < 0;
});

Fiddle

如果arrB非常大,您可能希望允许它为O(N)(对于小的),最多为O(N log N),而不是O(n ^ 2):

var lookup = arrB.reduce(function(lookup, item) {
    lookup[item] = true;
    return lookup;
}, {});
diff = arrA.filter(function(item) {
    return !Object.prototype.hasOwnProperty.call(lookup, item);
});

但是,这仅适用于项目的字符串表示形式。它适用于整数。

答案 3 :(得分:1)

以下内容如何:

var result = arrA.filter(function(elem){
  return arrB.indexOf(elem) === -1;
);

答案 4 :(得分:1)

要从任何阵列中删除需要使用拼接的项目:

&#13;
&#13;
$scope.items.splice(index, 1);
&#13;
&#13;
&#13;

现在您可以做的是,您可以运行for循环来识别重复元素。一旦确定,您可以使用拼接功能将其删除。