我有两个整数数组: 我正在研究我的Angularjs教程项目。
在控制器中我有两个数组:
var arrA=[12,54,76,98,45];
var arrB=[12,98];
我需要从 arrA 中删除 arrB 内的所有数字。
实施后arrA 必须如此:
arrA=[54,76,45]
在angularjs中实现它的最佳和最优雅的方法是什么?
答案 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。
答案 2 :(得分:1)
Angular并不关心数组操作等问题。 JavaScript为此提供了设施:
var diff = arrA.filter(function(item) {
return arrB.indexOf(item) < 0;
});
如果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)
要从任何阵列中删除需要使用拼接的项目:
$scope.items.splice(index, 1);
&#13;
现在您可以做的是,您可以运行for循环来识别重复元素。一旦确定,您可以使用拼接功能将其删除。