我有两个数组,如下所示。我想从Array1中删除Array2元素。我该怎么做?(在普通的java脚本中或使用ExtJS)
var Array1 = [];
var Array2 = [];
Array1.push(['eth0'], ['eth1']);
Array2.push(['eth1']);
答案 0 :(得分:1)
function removeDupes(a1, a2) {
var index = {}, result = [], i, l;
for (i=0, l=a2.length; i<l; i++) {
index['-' + a2[i]] = "";
}
for (i=0, l=a1.length; i<l; i++) {
if (index['-' + a1[i]] !== "") result.push(a1[i]);
}
return result;
}
index
对象用于快速查找值,以便我们快速测试它们的存在。'-' +
将迁移价值可能是toString
之类的事实,这些事物也作为对象属性存在。如果前缀为常规JavaScript标识符无法启动的字母,则每个值都可以安全地用作对象键。 示例:
removeDupes([1,2,3,4], [2,4,5]);
// -> [1,3]
removeDupes([2,4,5], [1,2,3,4]);
// -> [5]
答案 1 :(得分:1)
如果您可以使用阵列过滤功能,则可以执行以下操作:
var filteredArr = Array1.filter(function(val){
return Array2.indexOf(val) != -1;
})
我认为这只会在较新的浏览器中得到支持。这是处理这种情况的一种优雅方式,因此您可能需要查看像UnderscoreJS这样的库,其中包括过滤,默认为本机实现(如果可用)。
如果使用UnderscoreJS,代码看起来非常相似:
var filterdArr = _.filter(Array1, function(val) {return Array2.indexOf(val) != -1});
答案 2 :(得分:0)
点击此链接:http://www.developersnippets.com/2008/10/30/remove-duplicates-from-array-using-javascript/。用concat()控制你的数组并调用uniqueArr()。