2016-11-21 88 views
0

我目前正在一个项目,我将数值存储在一个JS数组。经过一些更改后,应该再次删除。我目前使用这样的array.splice方法:替代array.splice在JavaScript

function removeA(arr, element) { 
    var index = arr.indexOf(element); 
    if (index >= 0) { 
     arr.splice(index, 1); 
    } 
    return arr; 
} 

但是,这似乎给我在Safari上的问题。这段代码适用于所有浏览器,如Chrome,Firefox,Opera。但不适用于Safari。它甚至可以在Safari的技术预览版中使用。

有没有人有另一种选择?

感谢提前:)

+0

问题是什么? – epascarello

+0

它不会正确删除元素 – NowNewStart

+0

它是做什么的? – epascarello

回答

0

尝试slice()方法

arr = arr.slice(index, 1); 
+0

如果要在指定索引处删除该元素,并将所有其他元素留在数组中,那么'slice'不会给出相反的结果,只将该数组留在索引处指定的元素处,“删除”其他所有内容? – Nope

1

您可以使用内置的过滤器()

var array = [1,2,3,7,4,5,6,7,12,54,7,691]; 
 
var array = array.filter(x => x !== 7); 
 
console.log(array);

+0

看起来我的回复没有保存。除safari外,您的解决方案也适用于所有浏览器。该项目不会被正确删除。 – NowNewStart

0

你必须在索引之前和之后分割,并且结果是concat。请注意,Array.prototype.slice()不会像Array.prototype.splice()那样突变原始数组。

var arr = [0, 1, 2, 3, 4, 5, 6, 7]; 
 
var index = 5; 
 

 
var result = arr.slice(0, index).concat(arr.slice(index + 1)); 
 

 
console.log(result);

或者使用ES6和阵列蔓延:

var arr = [0, 1, 2, 3, 4, 5, 6, 7]; 
 
var index = 5; 
 

 
var result = [...arr.slice(0, index), ...arr.slice(index + 1)]; 
 

 
console.log(result);