JavaScript中array.splice的替代品

时间:2016-11-21 15:23:29

标签: javascript arrays safari splice

我目前正在开发一个项目,我将数值存储在JS数组中。经过一些更改后,应该再次删除它。我目前使用array.splice方法,如下所示:

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

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

有没有人有其他选择?

提前致谢:)

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

您必须在索引前后切片,并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);

答案 2 :(得分:1)

JavaScript中array.reduce的另一种替代方法是 var arr =[1,2,3,2,4,5,6,2]; var newarr = arr.reduce((acc, elem) => elem !== 2 ? acc.concat(elem) : acc, []); console.log(newarr);

public IEnumerable<SelfAssessment> GetSelfAssessment()
    {
        return _context.SelfAssessment;
    }

答案 3 :(得分:0)

尝试使用slice()方法

arr = arr.slice(index, 1 );

答案 4 :(得分:0)

抱歉来晚了,但希望它对其他人有用

var arr = [32, 33, 16, 40, 55, 2, 41, 3, 10];

document.write("Array : "+arr);
document.write("<br>");
document.write("Removed Elements : "+mySplice(arr,2,2));
document.write("<br>");
document.write("Processed Array : "+arr);


function mySplice(array,index,count) {
  var fixIndex = -1;
  var ret = [];
  arr = array.filter(function(element) {
    fixIndex++;
    if((fixIndex >= index && fixIndex < (index+count))) {
        ret[ret.length]=element;
        return false;
    } else {
        return true;
    }
  });
  return ret;
}

或者你可以使用简单的版本(注意:它很简单但相反)

var arr = [32, 33, 16, 40, 55, 2, 41, 3, 10];
document.write("Array : "+arr);
document.write("<br>");
document.write("Processed Array : "+mySplice_simple(arr,2,2));


function mySplice_simple(arr,index,count) {
  fixIndex = -1;
  return arr.filter(function(i) {
    fixIndex++;
    return !(fixIndex >= index && fixIndex < (index+count));
  });
}

或者如果你只需要删除一个元素,那么使用这个

var arr = [32, 33, 16, 40, 55, 2, 41, 3, 10];
document.write("Array : "+arr);
document.write("<br>");
document.write("Processed Array : "+mySplice_simple_v2(arr,2));


function mySplice_simple_v2(arr,index,count) {
  fixIndex = -1;
  return arr.filter(function(i) {
    fixIndex++;
    return fixIndex != index;
  });
}