Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays - Fatal编程技术网

Javascript 从数组中删除项并将其添加到另一个数组

Javascript 从数组中删除项并将其添加到另一个数组,javascript,arrays,Javascript,Arrays,我正在尝试从数组中删除一个项并将其添加到另一个数组中。数组状态由50个状态组成。用户需要输入一个状态的名称,并且该状态必须从状态数组中删除并添加到数组状态。这是我的密码 function searchString() { var total = 50; var string = document.getElementById("txtState").value; var element = document.getElementById("status"); fo

我正在尝试从数组中删除一个项并将其添加到另一个数组中。数组状态由50个状态组成。用户需要输入一个状态的名称,并且该状态必须从状态数组中删除并添加到数组状态。这是我的密码

function searchString()
{
    var total = 50;
    var string = document.getElementById("txtState").value;
    var element = document.getElementById("status");
    for (i=0; i < states.length; i++)
    {
        if(states[i].toUpperCase() == string.toUpperCase())
        {
            count = count + 1;
            //element.innerHTML = "CORRECT!!!"
            addElem = states.splice(i,1);
            correctState.push(addElem);

            /*for (j=0; j < correctState.length; j++)
            {
                if(correctState[j].toUpperCase() == string.toUpperCase())
                {
                    element.innerHTML = "Already Submitted. Try another State";
                }
            }*/
        }
        document.getElementById("score").innerHTML = count +"/"+ total;
        document.write(states);
        document.write(correctState);
    }
}
Enter State : <input type="text" name="txtState" id="txtState"><span id="timer"></span><br /><span id="status"></span>
<button type="button" name="btnPlay" id="btnPlay" accesskey="s" onClick="searchString()"><u>S</u>ubmit</button>
函数searchString()
{
var总计=50;
var string=document.getElementById(“txtState”).value;
var元素=document.getElementById(“状态”);
对于(i=0;i
提交

我无法实现我所需要的。我不熟悉javascript,需要帮助。

我猜这是因为您在枚举时修改了
状态
数组

假设您的状态数组是
[AR,LA,CT]
,用户输入
LA
。所以你的for循环是这样的

i = 0 (length is 3 so i < 3)
string not found
i = 1 (length is 3 so i < 3)
string found, remove it from states
i = 2 (length is 2 so i < 2 fails and there's no final loop)
function moveAllInstancesBetweenArrays(val, source, destination) {
    var indexOfVal = source.map(function(s) { return s.toUpperCase() })
                           .indexOf(val.toUpperCase());
    if(indexOfVal == -1)
       return;
   source.splice(indexOfVal, 1);
   destination.push(val);
   moveAllInstancesBetweenArrays(val, source, destination); //continue until all matching are moved
}

moveAllInstancesBetweenArrays(yourSearchVal, states, correctStates);
关于这些行:

addElem = states.splice(i,1);
correctState.push(addElem);
splice
不返回删除的元素,它返回这些元素的数组。因此,您的代码正在将数组实例推送到
correctState
。我会这样做:

correctState.push(states[i]); // First push the matching state onto `correctStates`
states.splice(i,1);           // ...then remove it
或者,您可以按照显示的顺序执行,您只需从返回的数组中取出已删除的元素

addElem = states.splice(i,1);
correctState.push(addElem[0]);
// Here -----------------^^^
不过,我还是会先推,然后再移除



另外,我将使用浏览器中内置的调试器单步遍历代码并观察其运行。我怀疑你会发现你想要移动一些东西,而且一旦你发现
string
与数组中的某个东西匹配,你几乎肯定会想停止循环。

为了帮助你,我们必须知道什么不起作用。你有点忘了提到这一点。你在哪里初始化了states数组?我正在尝试从states中删除一个元素并将其添加到correctState。通常你还会解释你想要它做什么以及它正在做什么。理想情况下,您应该设置一个JSFIDLE,这样人们就可以使用它,并准确地看到正在发生的事情。哦,还有,
document.write
不是调试任何东西的好方法。你几乎不应该使用它。改用
console.log
,只需查看浏览器的控制台即可。事实上,在典型的工作流程中,你总是会打开你的控制台,每天使用它进行多次实验和原型制作。你的猜测似乎是对的,你应该展示如何修复它。处理它…必须写一个解释first@Barmar:我不知道怎么做,循环的限制是
状态。长度
并且代码不依赖于
拼接后的
i
“…找到字符串,将其从状态中删除/length为2,因此i<2失败,没有最终循环…”但是
字符串
无论如何只能匹配一个条目,因此。。。如果
string
可以匹配多个条目,这将是一个问题,这是毫无疑问的,但在这里并不相关。像这样的迭代的问题是
i++
for()
循环中。拼接当前图元后,下一个图元将移动到其所在位置。但是下一次迭代会经过它,所以您永远不会处理该元素。这个问题最简单的解决方法是向下迭代,而不是向上迭代。这仍然不能解决我的帖子中的变异和枚举问题,但是如果列表包含唯一的values@GeorgeMauer:确实如此(见最后一段)。