2015-03-13 76 views
-1

的特定仅需要n个元件。例如我有一个数组的Javascript删除阵列

变种水果= [“香蕉”,“橙”,“苹果”,“芒果”,“应用”, “人”];

代码

fruits.splice(2, 2); 

回到我输出

香蕉,橘子,应用程序,男人

但如何从返回数组只有1,3,4元素没有循环?

所以我会得到

橙,芒果,应用

我成像必须是类似的东西

fruits.splice(fruits.indexOf(Orange,Mango,App), 1); 

回答

2

您可以使用filter过滤掉某些项目:

fruits = fruits.filter(function (e, i) { 
    return i === 1 || i === 3 || i === 4; 
}); 

或者,如果你想保留根据其身份(这似乎是你想在你的问题到底该干什么)某些项目:

fruits = fruits.filter(function (e) { 
    return e === "Orange" || e === "Mango" || e === "App"; 
}); 
+0

应该指出的是,'filter'功能仍在循环。 – 2015-03-13 11:44:56

+1

@AaditMShah是的,我没有注意到“没有循环”部分的问题,但添加或删除数组中的项目几乎总是需要某种循环,而且上面的代码更干净,更容易出错一个明确的循环。 – JLRishe 2015-03-13 11:47:45

0

您可以结合slicesplice方法:

var fruits = ["Banana", "Orange", "Apple", "Mango", "App", "Man"]; 
fruits.splice(2,1); 
var x = fruits.slice(1,4); 
x; 

说明:

  • splice删除1个元件开始于索引2(即。 “苹果” )。
  • slice提取从索引1开始的3个元素(即“Orange”,“Apple”,“Mango”,“App”;请记住,此时数组不再包含“Apple”)。

变化(无损):

var fruits = ["Banana", "Orange", "Apple", "Mango", "App", "Man"]; 
var x = fruits.slice(1,2).concat(fruits.slice(3,5)); 
x; 
+0

downvoter,我很高兴了解所提出的解决方案的不足之处,这更容易接受downvote本身之外的评论。 – collapsar 2015-03-13 11:44:36

+0

我并不是想暗示你会这么做。 – collapsar 2015-03-13 11:46:48

1

,你可以在你想保留这些元素的列表,通过同为JLRishe的答案,但是增加:

var fruits = ["Banana", "Orange", "Apple", "Mango", "App", "Man"]; 
 
var list = 'Orange, Mango, App'; 
 

 
alert(strip(fruits, list)); // ["Orange", "Mango", "App"] 
 

 
function strip(arr, list) { 
 
    list = list.split(', '); 
 
    return arr.filter(function (el) { 
 
     return list.indexOf(el) > -1; 
 
    }); 
 
}

+0

不错,但@JLRishe更短,过分+1 – 2015-03-13 11:49:40

+0

谢谢。我允许更多的灵活性tho :) – Andy 2015-03-13 11:58:27

+0

灵活性,如果按名称搜索我需要的元素位置 – 2015-03-13 12:00:28