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