Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我无法从数组中删除项_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript 我无法从数组中删除项

Javascript 我无法从数组中删除项,javascript,jquery,arrays,Javascript,Jquery,Arrays,这是我在网上找到的关于如何从数组中删除项的内容。 我使用splice,但当我打开控制台时,它会显示undefined。 如何使用jquery或javascript从数组中删除该项 谢谢 var images; function readURL2(input, where) { images = input; var counter = 0; var html = ""; if (input.files &&

这是我在网上找到的关于如何从数组中删除项的内容。 我使用splice,但当我打开控制台时,它会显示undefined。 如何使用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");
    }

//从初始数组开始

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"
});
…但这将返回一个新数组,因此不会修改原始数组

当您附近有一个可靠的代码段时,从数组中删除给定的值并不太困难

-
来源:

问题在于,您为删除函数提供了每个图像的初始索引,但删除图像会更改图像数组中的索引:

removeImg1将删除image1,您将拥有:

         index
image0   0
image2   1
removeImg2删除image2将不起作用,因为它的索引现在是1

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

Html:
我认为splice没有问题,你能在调用splice之前做一个console.log吗?是console.logimages.files;说未定义?如果是这种情况,您需要创建并填充arrayNot出现在OP定义的位置?请检查for循环,它看起来像一个无限循环!
         index
image0   0
image2   1
<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>
function removeImg(imgIndex) {
    $('#row-image-'+imgIndex).remove();
}