Foros del Web » Programando para Internet » Javascript »

Operador OR (simplificación)

Estas en el tema de Operador OR (simplificación) en el foro de Javascript en Foros del Web. Hola que tal gente inteligente y dedicada. Bueno tengo tiempo con el deseo de encontrar una forma de simplificar el uso del operador OR al ...
  #1 (permalink)  
Antiguo 06/08/2011, 20:40
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 10 meses
Puntos: 32
Pregunta Operador OR (simplificación)

Hola que tal gente inteligente y dedicada.

Bueno tengo tiempo con el deseo de encontrar una forma de simplificar el uso del operador OR al aplicarlo con una mísma variable, ejemplo:

Código Javascript:
Ver original
  1. var alimentos= [
  2.   "huevos",
  3.   "naranjas",
  4.   "papas",
  5.   "sandías",
  6.   "pizzas",
  7.   "platanos"
  8. ];
  9.  
  10. var seleccion= alimentos [parseInt (Math.random() * 6)];
  11.  
  12. if ( seleccion == "sandías" || seleccion == "naranjas" || seleccion == "platanos" )
  13.   alert("Hoy comeremos frutas!");
  14.  
  15. // La intención es usar una sola vez la variable "seleccion".
  16. // En mysql se usa mucho el operador "IN" el cuál en este caso sería de
  17. // la siguiente forma: seleccion IN ("naranjas", "platanos", "sandías")
  18. // quisiera algo parecido a eso.
  19.  
  20. // Conozco una forma usando la expresión regular de la siguiente manera:
  21.  
  22. if ( /(^platanos$)|(^naranjas$)|(^sandías$)/i.test(seleccion) )
  23.   alert("Hoy comeremos frutas!");
  24.  
  25. // Pero no me parece tan apropiado por ciertas razones

Espero y alguien pueda ayudarme, gracias y saludos!.
  #2 (permalink)  
Antiguo 06/08/2011, 21:34
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Operador OR (simplificación)

usa expresiones regulares
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 06/08/2011, 22:27
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Operador OR (simplificación)

No sé qué tan práctico te resulte, pero podrías usar operadores de bits:
Código PHP:
<script type="text/javascript">
var 
alimentos= ["huevos""naranjas""papas","sandías""pizzas""platanos"];
var 
bin=[1,2,4,8,16,32];
var 
frutas=bin[1] | bin[3] | bin[5]; 
var 
otraCosa=bin[0] | bin[2] | bin[4]; 
var 
seleccionparseInt (Math.random() * 6);
if(
frutas bin[seleccion]){
    
alert(alimentos[seleccion]+' es fruta');    
}else{
    
alert(alimentos[seleccion]+' es otra cosa');
}
</script> 

Última edición por Panino5001; 07/08/2011 a las 13:31
  #4 (permalink)  
Antiguo 07/08/2011, 01:05
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Operador OR (simplificación)

Cita:
Iniciado por IXtremeLT Ver Mensaje
// Conozco una forma usando la expresión regular de la siguiente manera:

if ( /(^platanos$)|(^naranjas$)|(^sandías$)/i.test(seleccion) )
alert("Hoy comeremos frutas!");

// Pero no me parece tan apropiado por ciertas razones
¿podrías explicar por qué no te parece tan apropiado? de hecho, es la mejor solución que encuentro (sin desacreditar la propuesta de @panino). por otro lado, notese que la expresión esta mal escrita.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 07/08/2011, 04:52
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Operador OR (simplificación)

Cita:
Iniciado por Panino5001
No sé qué tan práctico te resulte, pero podrías usar operadores de bits:
Código PHP:
<script type="text/javascript">
var 
alimentos= ["huevos""naranjas""papas","sandías""pizzas""platanos"];
var 
bin=[1,2,4,8,16,32];
var 
frutas=bin[1] | bin[3] | bin[5]; 
var 
otraCosa=bin[0] | bin[2] | bin[4]; 
var 
seleccionparseInt (Math.random() * 6);
if(
frutas bin[seleccion]){
    
alert(alimentos[seleccion]+' es fruta');    
}else{
    
alert(alimentos[seleccion]+' es otra cosa');
}
</script> 
¿Una pequeña explicación sobre los operadores bitwise, por favor?
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Última edición por Panino5001; 07/08/2011 a las 13:31
  #6 (permalink)  
Antiguo 07/08/2011, 07:39
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Operador OR (simplificación)

Van un par de links muy interesantes acerca de esos operadores:
http://www.algoritmia.net/articles.php?id=16
http://www.krazydad.com/arcaneoperators.php
http://db-in.com/blog/2011/05/binary-world/
http://graphics.stanford.edu/~seander/bithacks.html
  #7 (permalink)  
Antiguo 07/08/2011, 07:58
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Operador OR (simplificación)

Muy elegante tu solución panino5001 , en lo personal lo utilizo para permisos pero bien vale en esta ocasión, otra solución(no tan elegante), seria agregar contains(san google seguro tiene varias implementaciones) a Array, para luego hacer:

Código PHP:
Ver original
  1. if (['sandías', 'naranjas', 'platanos'].contains(seleccion)) {
  2.     console.log('Hoy comeremos frutas!');
  3. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 07/08/2011, 13:44
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 10 meses
Puntos: 32
Respuesta: Operador OR (simplificación)

Hola!, gracias por responder, pero ire mensaje x mensaje por hay varias respuestas que quiero responder:

Panino5001, gracias parece muy buena esa solución sin embargo no logro comprenderla del todo aún, núnca había probado algo así y menos con esos operadores con una sola "|" y "&", leeré en los links que me pasaste.

zerokilled, ¿podrías decirme dónde está la falla en la expresión regular que escribí?, es urgente por favor porque sí es algún error que desconózco tendré muchas fallas después, gracias.

masterpuppet, parece muy buena solución el usar un nuevo método dentro del prototipo del array, gracias.
  #9 (permalink)  
Antiguo 07/08/2011, 18:32
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: Operador OR (simplificación)

Si bien habria que ver la situacion concreta, en este caso podes usar una operacion inversa al IN de SQL, preguntando a la colección si contiene el elemento:

Código Javascript:
Ver original
  1. if(['platanos', 'naranjas', 'sandias'].indexOf(seleccion) != -1) {
  2.   alert("Hoy comeremos frutas!");  
  3. }

EDIT: Ahora que leo, ya te lo respondieron. El método contains es básicamente un indexOf en versión booleana, -1 -> false, el resto true.
__________________
blog | @aijoona
  #10 (permalink)  
Antiguo 07/08/2011, 19:56
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 10 meses
Puntos: 32
Respuesta: Operador OR (simplificación)

Hola Aijoona, gracias!, me parece perfecta esa solución, pués es muy simplificada y no hay por que agregar un nuevo método al Array, perfecto, saludos!
  #11 (permalink)  
Antiguo 07/08/2011, 20:02
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Operador OR (simplificación)

por cierto, al igual que contais, indexOf de los array es un método nuevo de la 5ta versión de ECMAScript. lo que significa que pueden haber interpretes sin dichas funciones, particularmente [como de costumbre] iexplorer. de todos modos, seguro por la web hay algún código para implementar la misma funcionalidad.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 07/08/2011 a las 20:47 Razón: edición, corrección gracias a una observación.
  #12 (permalink)  
Antiguo 07/08/2011, 20:29
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: Operador OR (simplificación)

Pero contains no forma parte de Ecma 262.

Por otro lado, la documentación de Mozilla provee del fallback (un poco extenso):

Código Javascript:
Ver original
  1. if (!Array.prototype.indexOf) {
  2.     Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
  3.         "use strict";
  4.         if (this === void 0 || this === null) {
  5.             throw new TypeError();
  6.         }
  7.         var t = Object(this);
  8.         var len = t.length >>> 0;
  9.         if (len === 0) {
  10.             return -1;
  11.         }
  12.         var n = 0;
  13.         if (arguments.length > 0) {
  14.             n = Number(arguments[1]);
  15.             if (n !== n) { // shortcut for verifying if it's NaN
  16.                 n = 0;
  17.             } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
  18.                 n = (n > 0 || -1) * Math.floor(Math.abs(n));
  19.             }
  20.         }
  21.         if (n >= len) {
  22.             return -1;
  23.         }
  24.         var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
  25.         for (; k < len; k++) {
  26.             if (k in t && t[k] === searchElement) {
  27.                 return k;
  28.             }
  29.         }
  30.         return -1;
  31.     }
  32. }
__________________
blog | @aijoona
  #13 (permalink)  
Antiguo 07/08/2011, 20:45
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Operador OR (simplificación)

Cita:
Pero contains no forma parte de Ecma 262.
tienes razón. de alguna manera habia mal interpretado lo que comenta @masterpuppet.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #14 (permalink)  
Antiguo 08/08/2011, 18:30
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 10 meses
Puntos: 32
Respuesta: Operador OR (simplificación)

Amm no se vallan tan lejos aún no llego a esos términos, saludos
  #15 (permalink)  
Antiguo 08/08/2011, 18:39
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Operador OR (simplificación)

no tiene nada complicado. ECMA es una organización privada que desarrolla estándares para sistemas de comunicación e informática. en este caso, ECMA-262 hace referencia a ECMAScript, la versión estandarizada de Javascript.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #16 (permalink)  
Antiguo 08/08/2011, 23:39
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Operador OR (simplificación)

Cita:
Iniciado por IXtremeLT Ver Mensaje
zerokilled, ¿podrías decirme dónde está la falla en la expresión regular que escribí?, es urgente por favor porque sí es algún error que desconózco tendré muchas fallas después, gracias.
los anclas ^ $ solo pueden ir al inicio y final de una expresión. pero tu los tienes al inicio y final de cada palabra.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #17 (permalink)  
Antiguo 09/08/2011, 13:01
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 10 meses
Puntos: 32
Respuesta: Operador OR (simplificación)

Cita:
Iniciado por zerokilled Ver Mensaje
los anclas ^ $ solo pueden ir al inicio y final de una expresión. pero tu los tienes al inicio y final de cada palabra.
A ok ty, nadamas que si puedes escribir esa expresión ya corregida para saber como debe ser escrita, gracias.
  #18 (permalink)  
Antiguo 09/08/2011, 13:10
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Operador OR (simplificación)

Código:
/^el resto va aqui dentro$/
// por supuesto, sin repetir los anclas ^ $ ;
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 09/08/2011 a las 13:17
  #19 (permalink)  
Antiguo 09/08/2011, 15:55
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 10 meses
Puntos: 32
Respuesta: Operador OR (simplificación)

Gracias!, lo que pasa que yo tenía entendido que los símbolos, de inicia con y termina con (^$), solamente funcionaban con el carácter que tuvieran a su lado pero estaba en lo incorreto, saludos.

Etiquetas: operador_or, simplificacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:34.