wake-up-neo.com

Wie kann ich einen Artikel in einem Array durch Javascript ersetzen?

Jedes Element dieses Arrays ist eine Anzahl.

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

Wie ersetze ich eine Zahl in Array durch eine neue?

Zum Beispiel möchten wir 3452 durch 1010 ersetzen. Wie würden wir das tun?

199
James
var index = items.indexOf(3452);

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

Es wird außerdem empfohlen, die Konstruktormethode nicht zum Initialisieren Ihrer Arrays zu verwenden. Verwenden Sie stattdessen die Literal-Syntax:

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

Sie können den Operator ~ auch verwenden, wenn Sie sich in knappem JavaScript befinden und den Vergleich von -1 abkürzen möchten:

var index = items.indexOf(3452);

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

Manchmal schreibe ich sogar gerne eine contains-Funktion, um diese Prüfung zu abstrahieren und das Verständnis der Vorgänge zu erleichtern. Das Tolle ist, dass dies sowohl für Arrays als auch für 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
}
336
Eli

Die Array.indexOf()-Methode ersetzt die erste Instanz. Um jede Instanz zu erhalten, benutze Array.map():

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

Das schafft natürlich ein neues Array. Wenn Sie dies vor Ort tun möchten, verwenden Sie Array.forEach():

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

Verwenden Sie indexOf, um ein Element zu finden.

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

Mit einer for-Schleife leicht zu erreichen.

for (var i = 0; i < items.length; i++)
    if (items[i] == 3452)
        items[i] = 1010;
17
mellamokb

Sie können eine beliebige Anzahl der Liste mithilfe von Indizes bearbeiten

zum Beispiel : 

items[0] = 5;
items[5] = 100;
11
VirtualTroll

Meine vorgeschlagene Lösung ist:

items.splice (1,1,1010)

Erläuterung: Die Spleißoperation entfernt ein Element, beginnend an Position 1 im Array (d. H. 3452), und ersetzt es durch das neue Element (1010).

3
Shimon Agassi

Wenn Sie ein komplexes Objekt (oder sogar ein einfaches Objekt) verwenden und es6 verwenden können, ist Array.prototype.findIndex ein gutes Objekt. Für das OP-Array könnten sie tun, 

const index = items.findIndex(x => x === 3452)
items[index] = 1010

Bei komplexeren Objekten leuchtet dies wirklich. Zum Beispiel, 

const index = 
    items.findIndex(
       x => x.jerseyNumber === 9 && x.school === 'Ohio State'
    )

items[index].lastName = 'Utah'
items[index].firstName = 'Johnny'
2
Yatrix
var items = Array(523,3452,334,31,5346);

Wenn Sie den Wert kennen, verwenden Sie

items[items.indexOf(334)] = 1010;

Wenn Sie wissen möchten, ob der Wert vorhanden ist oder nicht, verwenden Sie,

var point = items.indexOf(334);

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

Wenn Sie den Ort (Position) kennen, dann verwenden Sie direkt

items[--position] = 1010;

Wenn Sie nur wenige Elemente ersetzen möchten und nur die Startposition kennt, bedeutet dies:

items.splice(2, 1, 1010, 1220);

für mehr über .splice

2
KarSho

Der Austausch kann in einer Zeile erfolgen:

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

items[items.map((e, i) => [i, e]).filter(e => e[1] == 3452)[0][0]] = 1010

console.log(items);

Oder erstellen Sie eine Funktion zur Wiederverwendung:

Array.prototype.replace = function(t, v) {
    if (this.indexOf(t)!= -1)
        this[this.map((e, i) => [i, e]).filter(e => e[1] == t)[0][0]] = v;
  };

//Check
var items = Array(523, 3452, 334, 31, 5346);
items.replace(3452, 1010);
console.log(items);

1
Artee

Der einfachste Weg ist die Verwendung einiger Bibliotheken wie underscorejs und der Map-Methode.

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

_.map(items, function(num) {
  return (num == 3452) ? 1010 : num; 
});
=> [523, 1010, 334, 31, ...5346]
1
mrded

Hier ist die grundlegende Antwort in eine wiederverwendbare Funktion:

function arrayFindReplace(array, findValue, replaceValue){
    while(array.indexOf(findValue) !== -1){
        let index = array.indexOf(findValue);
        array[index] = replaceValue;
    }
}
1
JohnP2

Die unveränderliche Methode zum Ersetzen des Elements in der Liste mithilfe von ES6-Verteilungsoperatoren und der .slice -Methode.

const arr = ['fir', 'next', 'third'], item = 'next'

const nextArr = [
  ...arr.slice(0, arr.indexOf(item)), 
  'second',
  ...arr.slice(arr.indexOf(item) + 1)
]

Stellen Sie sicher, dass dies funktioniert

console.log(arr)     // [ 'fir', 'next', 'third' ]
console.log(nextArr) // ['fir', 'second', 'third']
1
Purkhalo Alex
var index = Array.indexOf(Array value);
        if (index > -1) {
          Array.splice(index, 1);
        }

von hier aus können Sie einen bestimmten Wert aus dem Array löschen und basierend auf demselben Index einen Wert in das Array einfügen.

 Array.splice(index, 0, Array value);
0
Gunjan Kumar

Ich löste dieses Problem mit for-Schleifen und Iteration durch das ursprüngliche Array und fügte die Positionen der übereinstimmenden Arreas zu einem anderen Array hinzu, dann dieses Array durchlaufen und im ursprünglichen Array ändern würde auch funktionieren.

var replace = (arr, replaceThis, WithThis) => {
    if (!Array.isArray(arr)) throw new RangeError("Error");
    var itemSpots = [];
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] == replaceThis) itemSpots.Push(i);
    }

    for (var i = 0; i < itemSpots.length; i++) {
        arr[itemSpots[i]] = WithThis;
    }

    return arr;
};
0
J. Svec

Schreiben Sie zunächst Ihr Array folgendermaßen um: 

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

Greifen Sie als Nächstes auf das Element im Array über seine Indexnummer zu. Die Formel zur Bestimmung der Indexnummer lautet: n-1

Um das erste Element (n=1) im Array zu ersetzen, schreiben Sie:

items[0] = Enter Your New Number;

In Ihrem Beispiel steht die Nummer 3452 an der zweiten Stelle (n=2). Die Formel zur Bestimmung der Indexnummer lautet also 2-1 = 1. Schreiben Sie also den folgenden Code, um 3452 durch 1010 zu ersetzen:

items[1] = 1010;
0
Anthony Levato
presentPrompt(id,productqty) {
    let alert = this.forgotCtrl.create({
      title: 'Test',
      inputs: [
        {
          name: 'pickqty',
          placeholder: 'pick quantity'
        },
        {
          name: 'state',
          value: 'verified',
          disabled:true,
          placeholder: 'state',

        }
      ],
      buttons: [
        {
          text: 'Ok',
          role: 'cancel',
          handler: data => {

            console.log('dataaaaname',data.pickqty);
            console.log('dataaaapwd',data.state);


          for (var i = 0; i < this.cottonLists.length; i++){

            if (this.cottonLists[i].id == id){
                this.cottonLists[i].real_stock = data.pickqty;

            }
          }

          for (var i = 0; i < this.cottonLists.length; i++){

            if (this.cottonLists[i].id == id){
              this.cottonLists[i].state = 'verified';   

          }
        }
            //Log object to console again.
            console.log("After update: ", this.cottonLists)
            console.log('Ok clicked');
          }
        },

      ]
    });
    alert.present();
  }

As per your requirement you can change fields and array names.
thats all. Enjoy your coding.
0
mahendren