603 Stimmen

Wie kann man ein Element in einem Array ersetzen?

Jedes Element dieses Arrays ist eine Zahl:

var items = Array(523,3452,334,31, ...5346);

Wie kann man einen Gegenstand durch einen neuen ersetzen?

Wir wollen zum Beispiel Folgendes ersetzen 3452 con 1010 Wie würden wir das tun?

748voto

Eli Punkte 16649
var index = items.indexOf(3452);

if (index !== -1) {
    items[index] = 1010;
}

Es wird auch empfohlen, die Konstruktormethode nicht zur Initialisierung der Arrays zu verwenden. Verwenden Sie stattdessen die Literal-Syntax:

var items = [523, 3452, 334, 31, 5346];

Sie können auch die ~ Operator, wenn Sie sich für kurzes JavaScript interessieren und die -1 Vergleich:

var index = items.indexOf(3452);

if (~index) {
    items[index] = 1010;
}

Manchmal schreibe ich auch gerne einen contains Funktion, um diese Prüfung zu abstrahieren und es einfacher zu machen, zu verstehen, was vor sich geht. Das Tolle daran ist, dass dies sowohl bei Arrays als auch bei Strings funktioniert:

var contains = function (haystack, needle) {
    return !!~haystack.indexOf(needle);
};

// can be used like so now:
if (contains(items, 3452)) {
    // do something else...
}

Beginnend mit ES6/ES2015 für Strings und vorgeschlagen für ES2016 für Arrays, können Sie leichter feststellen, ob eine Quelle einen anderen Wert enthält:

if (haystack.includes(needle)) {
    // do your thing
}

187voto

gilly3 Punkte 83450

El Array.indexOf() Methode wird die erste Instanz ersetzen. Um jede Instanz zu erhalten, verwenden Sie Array.map() :

a = a.map(function(item) { return item == 3452 ? 1010 : item; });

Dadurch wird natürlich ein neues Array erstellt. Wenn Sie es an Ort und Stelle tun wollen, verwenden Sie Array.forEach() :

a.forEach(function(item, i) { if (item == 3452) a[i] = 1010; });

127voto

muasif80 Punkte 4588

Die Antwort von @gilly3 ist großartig.

Ersetzen eines Objekts in einem Array, wobei die Reihenfolge des Arrays unverändert bleibt

Ich bevorzuge die folgende Methode, um den neuen aktualisierten Datensatz in meinem Array von Datensätzen zu aktualisieren, wenn ich Daten vom Server erhalte. Es hält die Reihenfolge intakt und ganz geradlinig ein Liner.

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);

118voto

Shimon Agassi Punkte 823

Mein Lösungsvorschlag wäre:

items.splice(1, 1, 1010);

Der Spleißvorgang beginnt bei Index 1, entfernt 1 Element aus dem Array (d. h. 3452 ), und ersetzt es durch den neuen Eintrag 1010 .

51voto

Tesserex Punkte 16756

Utilisez indexOf um ein Element zu finden.

var i = items.indexOf(3452);
items[i] = 1010;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X