删除数组元素,并将其余元素移到左侧

时间:2019-02-13 13:25:59

标签: javascript arrays

我要实现的目的是通过删除数组元素的索引并将其其余部分移到左侧。

因此,对数组['a','b','c','d']的第二个元素进行deleteshifting返回数组['a','c','d']

我设法使用下面的代码来做到这一点,我想知道是否存在一些内置方法(或它们的组合)以更简洁的方式做到这一点。

var src = ['a', 'b', 'c', 'd'];

const delShiftLeft = (arr, index) => arr.slice(0,index).concat(arr.slice(index+1));

console.log(delShiftLeft(src,1));

3 个答案:

答案 0 :(得分:4)

您可以使用方便的Array.prototype.splice方法。它接受以下3个参数:

  1. 应从中删除项目的索引
  2. 应删除的商品数量(0为有效值)
  3. (可选)项目数组,以防您要在该索引处添加新项目

因此,对于您的情况,您只需要执行arr.splice(index, 1)。请记住,拼接将返回所有已删除元素的数组,而不是更改后的数组。

这里是一个示例,您可以使用以下命令测试splice

var original = ["a", "b", "c", "d"];

var removed = document.querySelector("#removed");
var result = document.querySelector("#result");

Object.defineProperty(this, "index", {
  get: function() {
    return +document.querySelector("#index").value;
  }
});

Object.defineProperty(this, "count", {
  get: function() {
    return +document.querySelector("#count").value;
  }
});

document.querySelector("#index").addEventListener("change", calculate);
document.querySelector("#count").addEventListener("change", calculate);

function calculate() {
  var array = original.slice(0);
  var removedArray = array.splice(index, count, "e", "f");
  removed.innerHTML = removedArray.map(toLI).join("");
  result.innerHTML = array.map(toLI).join("");
}

function toLI(text) {
  return "<li>" + text + "</li>";
}

calculate();
<input type="number" id="index" value="1" min="0" max="4">
<input type="number" id="count" value="1" min="0" max="4">
<span>Adding ["e", "f"] to list</span>
<br/>
<span>Removed: </span>
<ul id="removed"></ul>
<span>Result: </span>
<ul id="result"></ul>

答案 1 :(得分:2)

答案 2 :(得分:0)

您可以使用数组的过滤方法。

var src = ['a', 'b', 'c', 'd'];


console.log(src.filter((e,i)=> i!==1));