JavaScript - consulta parámetros y argumentos en funciones

 
Vista:
sin imagen de perfil

consulta parámetros y argumentos en funciones

Publicado por nico (3 intervenciones) el 09/12/2015 15:57:05
Ante todo hola a todos!
Estoy con una duda en el tema funciones , a ver si alguien puede ayudarme con esto.

cree una función en la cual yo le entrego 2 paramentros (1 array y 1 variable) , y la función se encargue de buscar un valor " X" dentro del array y en caso de encontrarlo , sumar 1 (como si fuera un contador) en la variable restante declarada.

seria algo así:
1
2
3
4
5
6
7
8
9
10
11
12
var cadenaNumeros = [2,3,55,66,74,8,0];
var contador = 0;
valorReferencia = 66;
 
function buscar (parametro1, parametro2) {
	for (var i = 1; i < parametro1.length; i++) {
		if (parametro1[i]===valorReferencia) {
			parametro2=(parametro2+1)
}
}
}
buscar (cadenaNumeros , contador);

no logro que se incremente la variable ''contador" al encontrar una igualdad , esto es debido a que es tratada como una variable local (al ser argumento )? , como podría solucionarlo?

muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jordi
Val: 4
Ha aumentado su posición en 10 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

consulta parámetros y argumentos en funciones

Publicado por Jordi (76 intervenciones) el 09/12/2015 17:35:02
Hola Nico,

Comprueba que el programa entra en el if cuando tiene que entrar, primero que nada. Y sí, se trata de una variable local, con lo que aunque incrementes parametro2, no se verá reflejado de forma global. Para que se vea reflejado, debes convertir la variable en global (definirla sin el "var" delante) e incrementarla tal cual como contador++, sin pasarla por parámetro.

Otra opción sería hacer un return de dicho parámetro 2 e igualarlo al finalizar la ejecución.

Opción 1

1
2
3
4
5
6
7
8
9
10
11
12
var cadenaNumeros = [2,3,55,66,74,8,0];
contador = 0;
valorReferencia = 66;
 
function buscar (parametro1) {
	for (var i = 0; i < parametro1.length; i++) {
		if (parametro1[i]===valorReferencia) {
			contador++;
}
}
}
buscar (cadenaNumeros);


Opción 2

1
2
3
4
5
6
7
8
9
10
11
12
13
var cadenaNumeros = [2,3,55,66,74,8,0];
var contador = 0;
valorReferencia = 66;
 
function buscar (parametro1, parametro2) {
	for (var i = 0; i < parametro1.length; i++) {
		if (parametro1[i]===valorReferencia) {
			parametro2=(parametro2+1)
                }
        }
        return parametro2;
}
contador = buscar (cadenaNumeros , contador);


Nota: En el for, declaras var i = 1 en vez de var i = 1. Ten en cuenta que así te saltas la primera posición del array que vas a recorrer, porque empieza a contar posiciones desde la posición cero.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
Imágen de perfil de Jordi
Val: 4
Ha aumentado su posición en 10 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

consulta parámetros y argumentos en funciones

Publicado por Jordi (76 intervenciones) el 09/12/2015 19:07:48
Quería decir en vez de var i = 0. ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 95
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

consulta parámetros y argumentos en funciones

Publicado por Vainas (258 intervenciones) el 09/12/2015 19:24:03
Buenas:

Lo que te comenta Jordi tiene razon. Lo que estas comprobando es que javascript pasa a una function los parametros por referencia y otros por valor. Javascript los pasa siempre por valor menos los objetos y los arrays. Te recomiendo que busques en google pasar valores por referencia y por valor en javascript que seguro que consigues algo.

Cuando pasar el valor es como una copia del mismo que se destruye una vez que acaba la funcion; pasar un valor por referencia lo que pasas es un puntero o una direccion de donde esta el valor en memoria asi que trabajas con la variable que le estas pasando.

Para corregir tu problema Jordi ya te dio las pautas.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

consulta parámetros y argumentos en funciones

Publicado por nico (3 intervenciones) el 09/12/2015 19:59:05
Muchas gracias por contestar, acá encontré la info al respecto http://www.iteramos.com/pregunta/1620/es-javascript-un-paso-por-referencia-o-por-valor-de-idioma , era justamente lo que no sabia pero intuía(depende el tipo de variable, se crea copia o se utiliza directamente) , ahora me queda analizarlo bien para entenderlo y ponerlo en practica, nuevamente muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

consulta parámetros y argumentos en funciones

Publicado por nico (3 intervenciones) el 09/12/2015 19:55:19
gracias por aclararme la duda, si bien la opción 1 fue la primera que se me vino a la mente, la descarte porque necesitaba que la variable contador varíe según el caso, (por eso es que agregue el segundo parámetro ). opte por la solución 2, ahora me queda ver como funciona la orden "return" y que es lo que me devuelve en
1
contador = buscar (cadenaNumeros , contador);
otra opción mas rudimentaria que se me había ocurrido era la de agregar un segundo ciclo if / else if /else cuya condición sea paramentro2===contador , así de este modo especificando en cada if el contador correspondiente contador1, contador2, contador3, pero con la solución que me presentaste es mucho mas corta.

mas tarde voy a probar a ver que resultados me da

Nuevamente, muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar