删除数组的一个元素就是删除所有javascript

删除数组的一个元素就是删除所有javascript,javascript,arrays,Javascript,Arrays,尝试在单击按钮时从数组中删除元素 发生的事情是,它似乎在第二次单击时删除了所有元素 我编辑过这个;我需要的是将winArray重置为winArray=[]; 每次单击按钮时,用mainslotar填充它,然后删除1个元素,检查控制台,它只执行一次 这就是我迄今为止所尝试的 <!doctype html> <html> <head> <meta charset="UTF-8"> <script> mainSl

尝试在单击按钮时从数组中删除元素 发生的事情是,它似乎在第二次单击时删除了所有元素

我编辑过这个;我需要的是将winArray重置为winArray=[]; 每次单击按钮时,用mainslotar填充它,然后删除1个元素,检查控制台,它只执行一次

这就是我迄今为止所尝试的

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">


    <script>

    mainSlotArr =["1", "2", "3", "4", "5", "6"];
var winArray =[];
var winSpin = function () {

    winArray =  mainSlotArr.splice(0);


  var winIcon = winArray[0];

winArray = removeFromArray(winArray, winIcon);



}



function removeFromArray(array, el) {
   var pos = array.indexOf(el);
   pos > -1 && array.splice(pos, 1);
    console.log(winArray)

}


    </script>
</head>
<body>

 <div>
    <button type="button" onclick="winSpin();">Click Me!</button>              

</div>

</body>
</html>

mainslotar=[“1”、“2”、“3”、“4”、“5”、“6”];
var winArray=[];
var winSpin=函数(){
winArray=mainSlotar.splice(0);
var winIcon=winArray[0];
winArray=removeFromArray(winArray,winIcon);
}
函数removeFromArray(数组,el){
var pos=数组索引(el);
位置>-1和阵列拼接(位置1);
console.log(winArray)
}
点击我!

提前感谢
splice
array方法不仅返回某个范围内的元素数组,而且还将它们从原始数组中删除,因此当您在
mainslotar
上调用
splice
时,参数为0,您告诉它“从第一个开始获取所有元素”。如果要一次获取一个元素,则需要传递第二个参数
splice
,该参数确定要提取的元素量
splice(0,1)

似乎要删除数组的第一个元素

如果是,为什么没有用

i、 e:

否则,只需:

function removeFromArray(array, el) {
   var pos = array.indexOf(el);
   pos > -1 && array.splice(pos, 1);
}
removeFromArray(modifiedArray, 'someArrayElement');

JSbin

我有时间回去看看,mainslotar和所有数组都被清空的原因是我应该使用slice而不是splice (这就是你在压力下工作时的情况!!) 下面的脚本按预期工作,但真的不敢相信它被降低了

<head>
    <meta charset="UTF-8">

<script>

var mainSlotArr =["1", "2", "3", "4", "5", "6"];
var mCopy =  mainSlotArr.slice();
var firstTime = true;
var winArray = [];


var winSpin = function () {

 winArray =  mCopy.slice();

console.log(winArray)

var winIcon = winArray[0];

winArray = removeFromArray(winArray, winIcon);



}



function removeFromArray(arr, el) {
   var pos = arr.indexOf(el);
   pos > -1 && arr.splice(pos, 1);
   mCopy =  winArray.slice();

}


    </script>
</head>
<body>

 <div>
    <button type="button" onclick="winSpin();">Click Me!</button>              

</div>

</body>
</html>

var mainslotar=[“1”、“2”、“3”、“4”、“5”、“6”];
var mCopy=mainslotar.slice();
var firstTime=true;
var winArray=[];
var winSpin=函数(){
winArray=mCopy.slice();
console.log(winArray)
var winIcon=winArray[0];
winArray=removeFromArray(winArray,winIcon);
}
函数removeFromArray(arr,el){
var pos=arr.indexOf(el);
位置>-1和排列拼接(位置1);
mCopy=winArray.slice();
}
点击我!

你的点击函数是什么样子的?使用
数组.prototype.filter
这是一个很好的实践:
控制台.log([1,2,3,4,5]。filter(i=>i!==5))显示
mainslotar
数组项在执行splice语句后将winArray分配给mainslotar<代码>var-winSpin=function(){var-winArray=[];winArray=mainslotar.splice(0);var-winIcon=winArray[0];toDel=winArray.indexOf(winIcon);winArray.splice(toDel,1);console.log(winArray.length);//第一次单击时得到9,第二次单击时得到0??mainslotar=winArray;}
@Sachin K可以,但我不是想修改mainslotar,我是想每点击一次就将mainslotar复制到winArray,然后删除一个元素,当再次点击按钮时,也要这样做,所以winArray每次都会等于10,然后等于9。是的,但向前移动时,它可能是任何元素OK,我已经更新了一个简单的函数,它将从数组中删除一个元素。请注意,它不会通过引用修改原始数组,因此您需要将函数的结果重新分配给该数组。您好,谢谢您的帮助,我已使用您的代码编辑了我的上述帖子,但仍然没有问题。我的错误,我使用了错误的方法。我已经更新了代码片段。看一看jsbinHi仍然不起作用当我尝试用上面的代码实现它时,你的代码每次运行时都会启动mainslotar,我需要将mainslotar复制到winArray,因为我需要同时将它用于其他函数,它工作一次,然后将winArray设置为0,
<head>
    <meta charset="UTF-8">

<script>

var mainSlotArr =["1", "2", "3", "4", "5", "6"];
var mCopy =  mainSlotArr.slice();
var firstTime = true;
var winArray = [];


var winSpin = function () {

 winArray =  mCopy.slice();

console.log(winArray)

var winIcon = winArray[0];

winArray = removeFromArray(winArray, winIcon);



}



function removeFromArray(arr, el) {
   var pos = arr.indexOf(el);
   pos > -1 && arr.splice(pos, 1);
   mCopy =  winArray.slice();

}


    </script>
</head>
<body>

 <div>
    <button type="button" onclick="winSpin();">Click Me!</button>              

</div>

</body>
</html>