Estoy tratando de eliminar elementos de una matriz y luego agregarlos a otra. En algún momento los agregaré nuevamente a la matriz original. Cuando ejecuto la matriz 10 veces, la décima vez no devuelve el resultado esperado de la matriz completa = 0 remove array = 100; Alguien sabe por qué este sería el caso?
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/
3
non_tech_guy
29 ago. 2014 a las 12:56
2 respuestas
La mejor respuesta
Por favor use este código
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);
}
}
}
3
rajeshpanwar
29 ago. 2014 a las 10:03
Cambiar a forEach todavía produjo un error hasta que cambié arr.shift () en lugar de arr.splice (i, 0).
function removeShape(arr,item,rem){
arr.forEach(function(){
if(arr[i] === item) {
rem.push(arr.shift());
}
})
}
0
non_tech_guy
29 ago. 2014 a las 09:46
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.