web-dev-qa-db-fra.com

Comment remplacer un élément d'un tableau avec Javascript?

Chaque élément de ce tableau est un certain nombre.

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

Comment remplacer un nombre dans un tableau par un nouveau?

Par exemple, nous voulons remplacer 3452 par 1010, comment procéderions-nous?

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

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

De plus, il est recommandé de ne pas utiliser la méthode constructeur pour initialiser vos tableaux. À la place, utilisez la syntaxe littérale:

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

Vous pouvez également utiliser l'opérateur ~ si vous êtes passionné de JavaScript et que vous souhaitez raccourcir la comparaison -1:

var index = items.indexOf(3452);

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

Parfois, j’aime même écrire une fonction contains pour faire abstraction de cette vérification et faciliter la compréhension de ce qui se passe. Ce qui est génial, c'est que cela fonctionne sur les tableaux et les chaînes à la fois:

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

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

À partir de ES6/ES2015 pour les chaînes et proposé pour ES2016 pour les tableaux, vous pouvez plus facilement déterminer si une source contient une autre valeur:

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

La méthode Array.indexOf() remplacera la première instance. Pour obtenir chaque instance, utilisez Array.map():

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

Bien sûr, cela crée un nouveau tableau. Si vous voulez le faire en place, utilisez Array.forEach():

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

Utilisez indexOf pour rechercher un élément.

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

Facilement accompli avec une boucle for.

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

Vous pouvez éditer n'importe quel numéro de la liste en utilisant des index

par exemple : 

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

Ma solution suggérée est:

articles.splice (1,1,1010)

Explication: L’opération de jonction supprimera 1 élément en commençant à la position 1 du tableau (c’est-à-dire 3452) et le remplacera par le nouvel élément (1010).

3
Shimon Agassi

Si vous utilisez un objet complexe (ou même un objet simple) et que vous pouvez utiliser es6, Array.prototype.findIndex en est un bon. Pour le tableau de l'OP, ils pourraient faire, 

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

Pour des objets plus complexes, cela brille vraiment. Par exemple, 

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

Si vous connaissez la valeur alors utilisez,

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

Si vous voulez savoir que la valeur est présente ou non, utilisez,

var point = items.indexOf(334);

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

Si vous connaissez le lieu (position) puis utilisez directement,

items[--position] = 1010;

Si vous voulez remplacer quelques éléments et que vous ne connaissez que la position de départ,

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

pour en savoir plus sur .splice

2
KarSho

Le remplacement peut être effectué sur une seule ligne:

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

Ou créez une fonction à réutiliser:

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

Le moyen le plus simple consiste à utiliser certaines bibliothèques telles que underscorejs et la méthode map.

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

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

Voici la réponse de base transformée en une fonction réutilisable:

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

Le moyen immuable de remplacer l'élément dans la liste à l'aide des opérateurs d'étalement ES6 et de la méthode .slice.

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

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

Vérifiez que fonctionne

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

à partir de là, vous pouvez supprimer une valeur particulière d'un tableau et, à partir du même index, insérer une valeur dans un tableau.

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

J'ai résolu ce problème en utilisant des boucles for, en effectuant une itération dans le tableau d'origine et en ajoutant les positions des arreas correspondants à un autre tableau, puis en passant à travers ce tableau et en le modifiant dans le tableau d'origine, puis en le retournant. J'ai utilisé une fonction de flèche, mais une fonction régulière fonctionnerait aussi.

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

Commencez par réécrire votre tableau comme ceci: 

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

Ensuite, accédez à l'élément dans le tableau par son numéro d'index. La formule pour déterminer le numéro d'index est la suivante: n-1

Pour remplacer le premier élément (n=1) dans le tableau, écrivez:

items[0] = Enter Your New Number;

Dans votre exemple, le nombre 3452 est à la deuxième position (n=2). Donc, la formule pour déterminer le numéro d'index est 2-1 = 1. Donc écrivez le code suivant pour remplacer 3452 par 1010:

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