使用拼接从数组中删除元素

时间:2019-09-13 00:04:34

标签: javascript

假设我的回复是

enter image description here

然后通过循环并将pic.id推送到文件数组

files = []

response.data[0].pics.forEach(function(pic, i){
      let div = makeButtons(response.data[0].pics, files, imgPrevEdit);
      files.push(pic.id);
});

因此,在推送文件数组后,将变成这样

enter image description here

make button函数用于使用拼接函数删除数组中的特定元素

makeButtons: function(file, store, elem) {
    let button = document.createElement("button");
    button.classList.add('position-absolute','x', 'rounded-circle');
    button.type = "button";
    button.innerHTML= "x";

    button.addEventListener('click', () => {
        elem.removeChild(div);
        store.splice(store.indexOf(file), 1);
    });

    let div = document.createElement("div");
    div.classList.add('col', 'mt-2');
    div.appendChild(button);
    return div;
},

但是,当我单击按钮时,它总是从文件数组的末尾开始,但找不到特定的键并将其删除

知道如何解决吗?

1 个答案:

答案 0 :(得分:1)

  

它总是从文件数组的末尾开始

我认为是因为store.indexOf(file)返回了-1。在这种情况下,splice

  

将从数组的末尾开始(从原点开始)   -1,表示-n是最后一个元素的索引,因此等效于array.length-n)的索引

为什么store.indexOf(file)返回-1?因为您以response.data[0].pics作为参数传递了file,但是实际上您将pic.id推到了files并以store的身份传递了:

let div = makeButtons(response.data[0].pics, files, imgPrevEdit);
files.push(pic.id);