在JavaScript中从数组中删除项

Remove item from array in JavaScript

本文关键字:删除 数组 JavaScript      更新时间:2023-09-26

经常看到这个问题,但找不到我想要的东西。

onClick我将一个项目推送到我拥有的数组中,但是,如果我的数组中有3个项目,我就不想再推送项目了。

var selectedData = [];

我设置了空变量。

var index = selectedData.indexOf(3);

然后我得到我的数组的索引,它是3

if (index > 3) {
  selectedData.splice(index, 1);
}

然后在我的if statement中,我说,如果我的索引是3,大于3,那么在index处拼接并移除一。

selectedData.push(TheThing);

如果上面的if语句不正确,我会将TheThing推送到我的数组中。

然而,我有一个变量var arrayLength = selectedData.length;来获取长度,当我控制台记录它时,它从0开始,并拼接4之后的任何项目。不是3。

知道我做错了什么或误解了什么吗?感谢


我的代码的更完整示例

var selectedData = [];
myElement.on('click', function() {
  var index = selectedData.indexOf(3);
      if (index > 3) {
          selectedData.splice(index, 1);
      }
  var arrayLength = selectedData.length;
  console.log(arrayLength, 'the length');
});

简而言之,onClick检查我的数组,并删除第三个数组之后添加到我的数组中的任何内容。

您希望它表现为堆栈还是队列?

所以你的代码在这里:

var index = selectedData.indexOf(3);

不是抓取第三个索引,而是抓取它看到3的第一个索引,如果没有,则抓取-1。将if语句替换为

if (selectedData.length > 3) {
    selectedData.pop() // removes last element (stack)
    // or
    selectedData = selectedData.slice(1) //remove first element (queue)
}

我认为您需要尝试var arrayLength = selectedData.length -1;

你像普通数组一样从0开始,但你不是从一个空数组开始吗?

另外,当您使用.length时,它会返回数组或集合的真实计数,而不是0索引。`

您可以覆盖数组的push()方法,如下所示:

var a = [];
a.push = function(){}

或者像这个

a.push = function (newEl){
  if(this.length <3){
    Array.prototype.push.call(this, newEl)
  }
}

这不是一个完整的例子,因为push()可以接受许多参数,您也应该处理这种情况

var index=selectedData.indexOf(3);只需为您提供值为3的数组元素的索引示例

 selectedData = [ 0, 3 , 2];
 alert( selectedData.indexOf( 3 ) ); // this will alert "1" that is the index of the element with value "3"

您可以使用此场景

var selectedData = [];
myElement.on('click', function() {
  //if selectedData length is less than 3, push items
});

这是可行的。

myElement.on('click', function() {
    if(selectedData.length > 3){
        selectedData = selectedData.splice(0, 3);
    }
    console.log(selectedData.length, 'the length');
});