我无法从数组中删除项目

时间:2014-11-03 15:15:36

标签: javascript jquery arrays

这是我在网上找到的关于如何从数组中删除项目的内容。 我使用splice,但是当我打开控制台时,它表示未定义。 如何使用jquery或javascript从数组中删除项目?

感谢。

var images;

    function readURL2(input, where) {
        images = input;
        var counter = 0;
        var html = "";
        if (input.files && input.files[0]) {
            for (var i = 0; i < input.files.length; i++) {
                var reader = new FileReader();

                reader.onload = function (e) {
                    html += "<tr><td><img src='" + e.target.result + "' height='100'></td><td><button type='button' class='btn btn-danger' onclick='removeImg(" + counter + ")'><span class='fa fa-remove'></span> Remove</button></rd></tr>";

                    $(where).html(html);
                    counter++;
                }

                reader.readAsDataURL(input.files[i]);
            }
        }
    }

    function removeImg(imgIndex) {
        images.files.splice(imgIndex, 1);
        console.log(images.files);
        readURL2(images, "#miltiim");
    }

2 个答案:

答案 0 :(得分:0)

//以初始数组开始

var array = ["a", "b", "c"];

//从数组中查找和删除项目

var i = array.indexOf("b");
if(i != -1) {
    array.splice(i, 1);
}

当然,如果您想要删除多次出现的相同字符串/数字,则需要添加更多逻辑:

for(var i = array.length-1; i--;){
    if (array[i] === "b") array.splice(i, 1);
}

您可能认为过滤方法可行...

array.filter(function(i) {
    return i != "b"
});

...但是这将返回一个新数组,因此不会修改原始数据。

如果附近有可靠的代码片段,从数组中删除给定的值并不是太困难了!

-

来源:http://davidwalsh.name/remove-item-array-javascript

答案 1 :(得分:0)

问题是您将每个图像的初始索引提供给remove函数,但删除图像会更改images数组中的索引:

Initial:
         index
image0   0
image1   1
image2   2

removeImg("1")将删除image1,您将拥有:

         index
image0   0
image2   1

removeImg("2")删除image2将无效,因为其索引现在为1。

你应该做什么,而不是每次都需要生成图像,是为包含图像的每个tr设置一个id并使用jquery删除它:

HTML:

<tr id='row-image-"+counter+"'>
<td>
<img src='" + e.target.result + "' height='100'>
</td>
<td>
<button type='button' class='btn btn-danger'
        onclick='removeImg(" + counter + ")'>
<span class='fa fa-remove'></span> Remove</button>
</rd>
</tr>

JS:

function removeImg(imgIndex) {
    $('#row-image-'+imgIndex).remove();
}