假设我的回复是
然后通过循环并将pic.id推送到文件数组
files = []
response.data[0].pics.forEach(function(pic, i){
let div = makeButtons(response.data[0].pics, files, imgPrevEdit);
files.push(pic.id);
});
因此,在推送文件数组后,将变成这样
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;
},
但是,当我单击按钮时,它总是从文件数组的末尾开始,但找不到特定的键并将其删除
知道如何解决吗?
答案 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);