从数组中删除不匹配的元素

时间:2012-12-30 21:54:20

标签: jquery arrays loops element match

所以,我有两个数组,我想从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

3 个答案:

答案 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;
});