Porque mi objeto cambia en Javascript

Me gustaria saber porque pasa lo siguiente… Haciendo una funcion que toma el valor del medio de tres numeros probe con la primera idea que me vino a la mente es la funcion que esta aqui abajo..

    function valorMedio (inputArray) {         console.log(`arreglo original: [$  {inputArray}]`);         let mid = inputArray.sort((a,b) => a-b)[1]         console.log(`arreglo final: [$  {inputArray}]`);         return inputArray.indexOf(mid)     };      console.log(valorMedio([15, 22, -7]));
.as-console-wrapper { max-height: 100% !important; top: 0; }

sencilla; ordeno el arreglo tomo el segundo numero del arreglo ordenado y lo asigno a una variable y luego busco el indice de este numero en el arreglo original. El problema es que el arreglo muta, independientemente si lo que estoy haciendo es tomando un valor de este ordenado.. Cosa que si hago ej: mid =inputArray.sort((a,b) => a-b).join('') y toda la complicacion de luego no sucede.. Normalmente si quiero cambiar un arreglo que recibo por parametro hago inputArray = inputArray.sort((a,b) => a-b) array = array.modificaciones().

function valorMedio (inputArray) {     console.log(`arreglo original: [$  {inputArray}]`);     let mid = [...inputArray].sort((a,b)=>a-b)[1]          console.log(`arreglo final: [$  {inputArray}]`);     return inputArray.indexOf(mid) };  console.log(valorMedio([15, 22, -7])); console.log(valorMedio([1, -22, 75]));
.as-console-wrapper { max-height: 100% !important; top: 0; }

pense que no era extraño estaba asignando una referencia.. y resolvi haciendo copia del arreglo esta funcion de arriba pero lo raro fue que si hago:

function valorMedio2(a) {     return a.indexOf(a.sort((a, b) => a - b )[1]) }   function valorMedio3(a) {     return a.indexOf(a.concat().sort((a, b) => a - b )[1]) }  console.log('Incorrecto '+valorMedio2([15, 22, -7])); console.log('Correcto '+valorMedio3([15, 22, -7]));
.as-console-wrapper { max-height: 100% !important; top: 0; }

CON EL concat() SOLUCIONO EL PROBLEMA… Que es lo que pasa en Javascript que muta el arreglo???

¿Por qué la URL no cambia en este caso?

Enfrento este problema desde hace meses y no entiendo a qué se debe, si es mi navegador, si es servidor, si es algo de caché.

Tengo varias URL que se parecen, son puntos de entrada de una API, por ejemplo:

https://deiverbum.org/api/2019/01/tercia/20191002 https://deiverbum.org/api/2019/01/sexta/20191002 https://deiverbum.org/api/2019/01/nona/20191002 

Si estoy en cualquiera de ella y en la barra de navegación cambio el nombre del punto de entrada no me lo reconoce.

Digamos que estoy en la primera, en tercia y voy a la barra de navegación y borro tercia y escribo sexta, la página no me manda a la segunda URL que muestro más arriba, sino que se queda donde estaba, en tercia. A veces tengo que hacer 3, 4, 5, y ¡hasta 7 intentos! para que finalmente me haga el cambio.

Una de las cosas que intenté en el pasado fue forzar la recarga vía .htaccess como se sugiere en esta respuesta, pero no obtuve nada.

¿Por qué a veces si cambio un punto de entrada no me reconoce el cambio, y tengo que cambiarlo varias veces para que lo reconozca? ¿Por qué a veces hace el cambio a la primera? ¿Qué puedo hacer para siempre haga el cambio a la primera?

Como dato adicional, para que se entienda el contexto, todas estas peticiones son controladas por el archivo index.php de la carpeta y el .htaccess está así:

Options -Indexes  RewriteEngine on RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,L,R] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$   index.php?PATH_INFO=$  1 [L,QSA] 

VBA cambia a string una variable definida como Date

He definido las variables finicio y ffin como Date para guardar fechas introducidas con dos inputbox. ffin se mantiene como Date pero finicio se convierte a String. Las dos variables reciben exactamente el mismo trato.

Forzando la conversión a Date con CDate(finicio) sí funciona pero me gustaría saber por qué esta ocurriendo esto…

Sub CalculadoraAños()      Sheets("Calculadora").Activate      Dim fn, fMax, fMin, finicio, ffin As Date      'Fecha actual     fn = Date     Range("D4") = fn      'Fecha maxima     fMax = DateAdd("m", -1, fn)     Range("D6") = fMax      'Fecha minima     fMin = DateAdd("yyyy", -5, fn)     Range("D5") = fMin      'Fecha inicio     finicio = InputBox("Pega la fecha de inicio: ")     Range("D7") = finicio       'Fecha fin     ffin = InputBox("Pega la fecha de fin: ")     Range("D8") = ffin  End Sub 

¿Como puedo saber cuando le cambia el estilo a un elemento?

Hola tengo un gif que se muestra durante ciertas peticiones del ajax lo muestro con el .show() y lo oculto con el hide() hasta ahi todo normal, y tengo una función que se encarga de de arrojar una alerta si el tiempo durante el que se muestra el gif excede lo normal del tiempo,

esta es la función

    var totalTiempo=5;  function updateReloj(){      if(totalTiempo==0){     $  ('#LoadingImage').hide();     alert("Excede el tiempo");      }else if($  ('#LoadingImage').is(':visible')){         /* Restamos un segundo al tiempo restante */         totalTiempo-=1;         /* Ejecutamos nuevamente la función al pasar 1000 milisegundos (1 segundo) */         setTimeout("updateReloj()",1000);     };  }; 

este funciona normal ahora mi problema es el siguiente me gustaria saber si hay alguna manera de que se detecte cuando el LoadingImage cambia su estilo de hide a show y viceversa probé con estos métodos

if($  ('#LoadingImage').is(':visible')){       //Cambio a visible        updateReloj();   }; 

pero que pasa ese codigo lo tendria que poner despues de un show para que funcione entonces pense en poner un Change, pero este no me dectecta cuando cambia el LoadingImage de show() a hide() y viceversa y no se como hacer para que el change detecte eso.

si bien es cierto que puedo poner una llamada de la función después de cada show para mi seria mucho mejor un change del LoadingImage

componente para selecionar fecha y JSpinner en una tabla cambia la informacion en las otras filas

Buen Dia Necesito de su ayuda para solucionar dos problemas. inserte un componente para seleccionar fecha en una columna de una tabla y un JSpinner tambien. de la siguiente manera:

Tengo una libreria la cual me ayuda a usar el componente para usar las fechas llamada

RSCalendar

introducir la descripción de la imagen aquí

-tengo una clase llamada tabla_spinner, la cual es la misma para el componente de las fechas

package clases;  import java.awt.Component; import javax.swing.AbstractCellEditor; import javax.swing.JSpinner; import javax.swing.JTable; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer;  /**  *  * @author ANGELICA  */ public class tabla_spinner extends AbstractCellEditor implements TableCellRenderer,TableCellEditor{     JSpinner spinner=new JSpinner();     Object valorActual;        @Override     public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {         return spinner;//y retornamos el label     }     @Override     public Component getTableCellRendererComponent         (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {          //si el datos es un objetc osea jlabel         if (value instanceof JSpinner) {             spinner=(JSpinner) value;//lo convertimos a JLabel              return spinner;//y retornamos el label         }          return spinner;     }     @Override     public Object getCellEditorValue() {         return spinner;     }  } 

-y con el siguiente codigo añado el JSpinner y el componente RSCalendar a las tablas

    TableColumn Tcolfechachooser=vencimiento_productos_tabla.getColumnModel().getColumn(1);              Tcolfechachooser.setCellEditor(new tabla_fechachosser());     Tcolfechachooser.setCellRenderer(new tabla_fechachosser());      TableColumn Tcolspinner=vencimiento_productos_tabla.getColumnModel().getColumn(3);     Tcolspinner.setCellEditor(new tabla_spinner());       Tcolspinner.setCellRenderer(new tabla_spinner());      modelo_vencimiento_productos=(DefaultTableModel) vencimiento_productos_tabla.getModel();     Object nuevafila[]={"","","","",""};     modelo_vencimiento_productos.addRow(nuevafila); 
  1. mi problema es que por ejemplo con el JSpinner selecciono un numero en una fila por ejemplo fila (1), y cuando selecciono otra fila por ejemplo fila (2), esta fila seleccionada (la 2) en la columna en la que esta el JSpinner se transfiere el numero de la anterior fila(1). exactamente ocurre con la celda en la cual esta el componente donde selecciono la fecha.Osea que en conclucion el codigo que estoy usando hara esto con todos los componentes.

introducir la descripción de la imagen aquí

  1. mi segundo problema es al tratar de obtener estos datos del JSpinner y el componente para selecionar las fechas. con el siguiente codigo:

    String fecha=String.valueOf(modelo_vencimiento_productos.getValueAt(vencimiento_productos_tabla.getSelectedRow(),1));

    String dias=String.valueOf(modelo_vencimiento_productos.getValueAt(vencimiento_productos_tabla.getSelectedRow(),3));

lo que me recolecta es esto:

-para la fecha:

rojeru_san.componentes.RSDateChooser[,-192,-20,0x0,invalid,layout=javax.swing.GroupLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777217,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=240,height=40]] 

-para el numero del JSpinner

javax.swing.JSpinner[,-193,-20,0x0,invalid,layout=javax.swing.plaf.basic.BasicSpinnerUI$  Handler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$  CompoundBorderUIResource@2df0c8a,flags=328,maximumSize=,minimumSize=,preferredSize=] 

¿Cómo evitar que una ruta de MapViewDirections se recargue si la ubicación actual cambia?

Mi problema es que cuando se genera una ruta en mi aplicación, cada que la ubicación actual cambia, MapViewDirections se vuelve a cargar y hace que tenga errores cuando no hay conexión a internet

Mi idea es que cuando se genere la ruta, y no haya conexión a internet, vaya desapareciendo la linea conforme se avanza, sin que se recargue la ruta.

Todo esto para que trabaje offline la app.

Se puede hacer que solo una vez se cargue la ruta sin ver la ubicación actual mientras esté desplegada la ruta?

Mi código está implementado de la siguiente manera.

class HomeScreen extends React.Component {    static navigationOptions = ({ navigation }) => {     return {       headerTitle: ('',         <Image style={{ width: 150, height: 40 }}           source={require('./images/mibici.png')}         />       ),        //Use navigations.getParam to access get access to menu, because this is static and cannot access by itself       headerLeft: (         <TouchableHighlight onPress={navigation.getParam('menu')}>           <Image style={{ width: 50, height: 40 }}             source={require('./images/hamburger_icon.png')}           />         </TouchableHighlight>       ),      };   };    constructor(props) {     super(props);     this.state = {      ...AbortController     }   }     state = {     mapRegion: null,     lastLat: null,     lastLong: null   }    componentDidMount() {     this.watchID = navigator.geolocation.watchPosition((position) => {       // Creating the object to update this.state.mapRegion through the onRegionChange function and calculates the zoom of the first run       let region = {         latitude: position.coords.latitude,         longitude: position.coords.longitude,         latitudeDelta: LATITUDE_DELTA,         longitudeDelta: LONGITUDE_DELTA,       }       this.onRegionChange(region, region.latitude, region.longitude);     }, (error) => console.log(error));   }     onRegionChange(region, lastLat, lastLong) {     this.setState({       mapRegion: region,       // If there are no new values set the current ones       lastLat: lastLat || this.state.lastLat,       lastLong: lastLong || this.state.lastLong     });     currentLocation = { latitude: this.state.lastLat, longitude: this.state.lastLong }     this.setState({       currentLocation: currentLocation //created to get the current location for creating routes     })   }    componentWillUnmount() {     navigator.geolocation.clearWatch(this.watchID);   }     render() {      const predictions = this.state.predictions.map(prediction => (       <TouchableHighlight         onPress={() =>           this.getRouteDirections(             //prediction.structured_formatting.main_text //Simple and short location text             prediction.description //For detailed location text           )         }       >         <View>           <Text style={styles.suggestions}> {prediction.description} </Text>         </View>       </TouchableHighlight>     ));      Geocoder.init(GOOGLE_MAPS_API_KEY);      return (       <View style={{ flex: 1 }}>         <TextInput           style={styles.mapSearch}           placeholder="Empecemos escribiendo tu destino..."           onChangeText={             destination => {               this.onChangeDestinationDebounced(destination)             }           }         />          {predictions}          {this.checkConnection()}          <MapView           provider={PROVIDER_GOOGLE}           style={{ flex: 1 }} //Shows map in full view           region={this.state.mapRegion} //The map centers in the current position of user           showsUserLocation={true}           showsMyLocationButton={true} //Button to ubicate the current location in the center           loadingEnabled={true}           //showsTraffic={true}           cacheEnabled={true}           showsScale={true}           //customMapStyle={customMap}         >           <MapViewDirections             origin={this.state.currentLocation}             waypoints={this.state.waypointStation}             destination={this.state.finalDestination}             apikey={GOOGLE_MAPS_API_KEY}             strokeWidth={4} //Sets how widht you want the line of the generated route             strokeColor="#B82C2C"//Sets the color you want the line of the generated route             mode="bicycling"             language="es"             optimizeWaypoints={true}              ref={c => this.mapView = c}             onPress={this.onMapPress}              onReady={result => {               var numeral = require('numeral');               const distanceMax = numeral(result.distance).format('0')               var distance = numeral(result.distance).format('0.00')               var duration = numeral(result.duration).format('0,0')                Alert.alert(                 'Aquí tienes información sobre tu viaje',                 'Distancia: ' + distance + ' km \n Duración: ' + duration + ' minutos',                 [                   { text: '¡Empecemos!', onPress: () => this.setState({ startPressed: true }) },                   { text: '¿No era lo que querías?', onPress: () => this.setState({ finalDestination: '', startPressed: false }) }                 ]               )               ShowedOnceOnReady = true              }             }           />            {this.state.markers.map(marker => (             <Marker               coordinate={marker.coordinate}               title={marker.title}               description={marker.description}               pinColor='#5882FA'             />           ))}          </MapView>          {this.state.startPressed == true ?           <TouchableOpacity             style={styles.cancelButton}             onPress={this._cancelTravel}           >             <Text style={styles.cancelButtonText}> Cancelar viaje </Text>           </TouchableOpacity>           : null}        </View >     )   } }