在数组之间交换元素
Swap elements between arrays
我正试图从一个数组中删除项,然后添加到另一个数组。在某个阶段,我会将它们添加回原始数组。当我运行数组10次时,第10次没有返回完整数组=0的预期结果,移除数组=100;有人知道为什么会这样吗?
var fullArr = [];//contains all items
var remArr = [];//contains removed items
var userAnswer = true;//this would be user input
populateArray();
runTenTimes();
//getting the answer right 10 times should result in fullArr.length = 0; remArr.length = 100;
function runTenTimes(){
for(var i=0;i<10;i++){
//console.log(i);
checkUserAnswer();
}
}
function populateArray(){
for(var i=0;i<100;i++){
fullArr.push(i);
}
}
function checkUserAnswer(){
if(userAnswer){//only if true
for(i=0;i<10;i++){//10 because I remove 10 at a time
removeShape(fullArr,fullArr[i],remArr);
}
}else{
// add elements from remove arr
// back into full array
}
console.log("full array : " + fullArr.length);
console.log("remove array : " + remArr.length);
console.log("------------------")
}
function removeShape(arr,item,rem){
for(var i = 0;i<arr.length; i++) {
if(arr[i] === item) {
rem.push(arr[i]);
arr.splice(i, 1);
}
}
}
http://jsfiddle.net/non_tech_guy/vy671jv4/
请使用此代码
var fullArr = [];//contains all items
var remArr = [];//contains removed items
var userAnswer = true;//this would be user input
populateArray();
runTenTimes();
//getting the answer right 10 times should result in fullArr.length = 0; remArr.length = 100;
function runTenTimes(){
for(var i=0;i<10;i++){
//console.log(i);
checkUserAnswer();
}
}
function populateArray(){
for(var i=0;i<100;i++){
fullArr.push(i);
}
}
function checkUserAnswer(){
if(userAnswer){//only if true
var arrCopy = fullArr.slice(0);
for(i=0;i<10;i++){//10 because I remove 10 at a time
removeShape(fullArr,arrCopy[i],remArr);
}
}else{
// add elements from remove arr
// back into full array
}
console.log("full array : " + fullArr.length);
console.log("remove array : " + remArr.length);
console.log("------------------")
}
function removeShape(arr,item,rem){
for(var i = 0;i<arr.length; i++) {
if(arr[i] === item) {
rem.push(arr[i]);
arr.splice(i, 1);
}
}
}
更改为forEach仍然会产生错误,直到我更改了arr.shift()而不是arr.splice(I,0)。
function removeShape(arr,item,rem){
arr.forEach(function(){
if(arr[i] === item) {
rem.push(arr.shift());
}
})
}
相关文章:
- 我可以通过JQuery将CSS类交换为一个特殊的元素集吗
- 拖动和交换列表元素
- 在两个选中的元素之间交换数据
- 交换两个 html 元素并保留其上的事件侦听器
- jQuery 交换元素内容给出类型 F 错误
- 用 jQuery 交换列表元素
- 如何使用 JQuery 将 H1 元素与另一个文档中的 H1 交换
- 在 JavaScript 中交换 8x8 矩阵中的元素
- 如何迭代html元素并交换它们的值
- 如何交换第一个和最后一个DOM元素
- Javascript将数组元素交换到另一个索引并删除旧索引
- 如何用JavaScript交换屏幕上的元素
- 在数组之间交换元素
- 如何在交换后将列表元素返回到其原始样式
- 使用延迟交换嵌套循环中的数组元素
- 如何在单击时将第一个列表元素与另一个li元素交换
- Jquery交换图像悬停在不同的元素
- 使用jquery交换非连续元素
- 与子JavaScript/jQuery交换DOM元素中的文本
- 如何交换两个元素的位置,包括它们的类/id与onclick