使用Splice()函数,如何删除特定的数组元素?

时间:2017-04-19 20:58:16

标签: javascript arrays meteor splice

单击图像时,我的代码应该将图像_id详细信息添加到clickedImagesArray数组中。这成功了。但是,再次单击图像时,我的代码无法将其从clickedImagesArray数组中删除。

在下面找到我的代码:

"click .image": function (event) {

var clickedImage = [this._id];
var clicked = this._id;
var clickedImagesArray = Session.get('clickedImages');

clickedImage.forEach(function (clicked){
    //#### If no duplcate then push() 
    if (clickedImage.indexOf(clicked) ==-1) {
        alert("NOOOO Duplicates!" + clicked);  
        clickedImagesArray.push({imageId: clicked});
        }
    else if (clickedImage.indexOf(clicked) == 0) {
    //#### Else when duplcate found delete duplicate
        alert("Found Duplicates!" + clicked);       
        clickedImagesArray.splice({imageId: clicked});

我感觉我没有正确使用splice()函数。

        }     
  }); 

});

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我认为这里有一个错误:

else if (clickedImage.indexOf(clicked) == 0) {

您应该更改为:

else if (clickedImage.indexOf(clicked) != -1) {

这是因为您不知道元素的确切索引。

哦,拼接也是错误的,你需要找到要删除它的元素的索引,如下所示:

clickedImagesArray.splice(clickedImage.indexOf(clicked), 1);

答案 1 :(得分:1)

您需要在包含值的数组中提取索引。 然后使用splice从索引中删除该记录。

splice(startIndex, deleteCount)

startIndex:是您要开始删除的索引 deleteCount:要从startIndex

开始删除的记录数
// find the index of the imageId in the array.
var index = clickedImage.indexOf(clicked);

// if item is found in the array remove it.
if (index !== -1) {
  // remove one item starting from the index.
  clickedImage.splice(index, 1);
}

阅读MDN中的文档。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice