¿Cómo reemplazar un elemento en una matriz?
Cada elemento de esta matriz es un número:
var items = Array(523,3452,334,31, ...5346);
¿Cómo reemplazar algún artículo por uno nuevo?
Por ejemplo, queremos reemplazar 3452
con 1010
, ¿cómo haríamos esto?
var index = items.indexOf(3452);
if (index !== -1) {
items[index] = 1010;
}
También se recomienda no utilizar el método constructor para inicializar sus matrices. En su lugar, utilice la sintaxis literal:
var items = [523, 3452, 334, 31, 5346];
También puede utilizar el ~
operador si le gusta JavaScript conciso y desea acortar la -1
comparación:
var index = items.indexOf(3452);
if (~index) {
items[index] = 1010;
}
A veces incluso me gusta escribir una contains
función para abstraer esta verificación y hacer que sea más fácil entender lo que está pasando. Lo sorprendente es que esto funciona tanto en matrices como en cadenas:
var contains = function (haystack, needle) {
return !!~haystack.indexOf(needle);
};
// can be used like so now:
if (contains(items, 3452)) {
// do something else...
}
A partir de ES6/ES2015 para cadenas y propuesto para ES2016 para matrices, puede determinar más fácilmente si una fuente contiene otro valor:
if (haystack.includes(needle)) {
// do your thing
}
El Array.indexOf()
método reemplazará la primera instancia. Para obtener cada instancia use Array.map()
:
a = a.map(item => item == 3452 ? 1010 : item);
Por supuesto, eso crea una nueva matriz. Si desea hacerlo en su lugar, utilice Array.forEach()
:
a.forEach((item, i) => { if (item == 3452) a[i] = 1010; });
La respuesta de @gilly3 es genial.
Reemplace el objeto en una matriz, manteniendo el orden de la matriz sin cambios
Prefiero la siguiente forma de actualizar el nuevo registro actualizado en mi conjunto de registros cuando obtengo datos del servidor. Mantiene el orden intacto y es bastante sencillo.
users = users.map(u => u.id !== editedUser.id ? u : editedUser);
var users = [
{id: 1, firstname: 'John', lastname: 'Ken'},
{id: 2, firstname: 'Robin', lastname: 'Hood'},
{id: 3, firstname: 'William', lastname: 'Cook'}
];
var editedUser = {id: 2, firstname: 'Michael', lastname: 'Angelo'};
users = users.map(u => u.id !== editedUser.id ? u : editedUser);
console.log('users -> ', users);
Mi solución sugerida sería:
items.splice(start, deleteCount, item1);
Documentos
La splice
operación comenzará en el índice start
, eliminará deleteCount
el elemento de la matriz y lo reemplazará con el nuevo elemento item1
.