所以,我有两个数组,我想从array2中删除所有未包含在array1中的数字的元素(下面的示例数组将使它更清晰)。
我猜一个for循环和一个if语句可以解决这个问题,但我认为如果有人有建议的话,有一个更优雅的解决方案吗?
var elemsToKeep = [1, 3, 5, 6, 8];
var arr[0] = 'foo1';
var arr[1] = 'foo2'; // remove
var arr[2] = 'foo3';
var arr[3] = 'foo4'; // remove
var arr[4] = 'foo5';
var arr[5] = 'foo6';
var arr[6] = 'foo7'; // remove
var arr[7] = 'foo8';
var arr[8] = 'foo9'; // remove
var arr[9] = 'foo10'; // remove
答案 0 :(得分:3)
而不是尝试删除不需要的值,而是创建一个只包含所需值的新数组。提示:它涉及一个循环和Array.push
。
答案 1 :(得分:2)
也许是filter(我第一次使用一个,所以我刚刚弹出并制作了jsfiddle.net)
注意更新以删除任何非数字字符 - 这意味着1foo2将变为12 - 让我知道如果这不是你想要的,那么可以应用不同的正则表达式
var elemsToKeep = [1, 3, 5, 6, 8];
var arr=[];
arr[0] = 'one1';
arr[1] = 'two2'; // remove
arr[2] = 'three3';
arr[3] = 'four4'; // remove
arr[4] = 'five5';
arr[5] = 'six6';
arr[6] = 'seven7'; // remove
arr[7] = 'eight8';
arr[8] = 'nine9'; // remove
arr[9] = 'ten0'; // remove
function keep(element, index, array) {
var num = parseInt(element.replace(/[^\d]/g,''),10); // any char!
return elemsToKeep.indexOf(num) !=-1;
}
var filtered = arr.filter(keep);
alert(filtered)
答案 2 :(得分:1)
你可以使用Underscore的_reject函数:
var filtered = _reject(arr2, function(element, index) {
return elementsToKeep.indexOf(index +1) == -1;
});