首页 > 解决方案 > 使用拼接从数组中删除元素

问题描述

假设我有一个回应

在此处输入图像描述

我正在循环它并将 pic.id 推送到 files 数组

files = []

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

所以推入文件数组后会变成这样

在此处输入图像描述

制作按钮功能用于使用拼接功能删除数组上的某个元素

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;
},

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

知道如何解决吗?

标签: javascript

解决方案


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

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

将从数组末尾开始很多元素(原点 -1,意味着 -n 是倒数第 n 个元素的索引,因此等效于 array.length - n 的索引)

为什么store.indexOf(file)退货-1?因为您response.data[0].pics作为file参数传递,但实际上您将其推送pic.id为:filesstore

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

推荐阅读