0

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

3 回答 3

3

与其尝试删除您不需要的值,不如创建一个仅包含您需要的值的新数组。提示:它涉及一个循环和Array.push.

于 2012-12-30T21:56:51.213 回答
2

也许是一个过滤器 (我第一次使用一个,所以我刚刚弹出并制作了一个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)​
于 2012-12-30T21:58:28.300 回答
1

您可以使用下划线的 _reject 功能:

var filtered = _reject(arr2, function(element, index) {
   return elementsToKeep.indexOf(index +1) == -1;
});
于 2012-12-30T22:08:47.827 回答