Как заменить элемент в массиве на Javascript?

Каждый элемент этого массива - это некоторое число.

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

Как заменить некоторое число с помощью массива на новый?

Например, мы хотим заменить 3452 на 1010, как мы это сделаем?

Ответ 1

var index = items.indexOf(3452);

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

Также рекомендуется не использовать метод конструктора для инициализации ваших массивов. Вместо этого используйте буквенный синтаксис:

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

Вы также можете использовать оператор ~, если вы используете краткий JavaScript и хотите сократить сравнение -1:

var index = items.indexOf(3452);

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

Иногда мне даже нравится писать функцию contains, чтобы отвлечь эту проверку и упростить понимание того, что происходит. Что удивительно, это работает с массивами и строками:

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

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

Начиная с ES6/ES2015 для строк и предлагаемого для ES2016 для массивов, вы можете более легко определить, содержит ли источник другое значение:

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

Ответ 2

Метод Array.indexOf() заменит первый экземпляр. Чтобы каждый экземпляр использовал Array.map():

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

Конечно, это создает новый массив. Если вы хотите сделать это на месте, используйте Array.forEach():

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

Ответ 3

Используйте indexOf для поиска элемента.

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

Ответ 4

Легко выполняется с помощью цикла for.

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

Ответ 5

Мое предлагаемое решение будет:

items.splice(1, 1, 1010);

Операция объединения удалит 1 элемент, начиная с позиции 1 в массиве (т. 3452), и заменит его новым элементом 1010.

Ответ 6

Вы можете редактировать любое количество списков с помощью индексов

например:

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

Ответ 7

Если вы используете сложный объект (или даже простой), и вы можете использовать es6, Array.prototype.findIndex является хорошим. Для массива OP они могли бы сделать,

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

Для более сложных объектов это действительно светит. Например,

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

items[index].lastName = 'Utah'
items[index].firstName = 'Johnny'

Ответ 8

Замена может быть выполнена в одну строку:

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

Ответ 9

Самый простой способ - использовать некоторые библиотеки, такие как underscorejs и метод сопоставления.

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

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

Ответ 10

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

Если вы знаете значение, используйте

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

Если вы хотите знать, что это значение присутствует или нет, используйте

var point = items.indexOf(334);

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

Если вы знаете место (положение), то прямо используете,

items[--position] = 1010;

Если вы хотите заменить несколько элементов, и вы знаете, что только начальная позиция означает только

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

для получения дополнительной информации о . splice

Ответ 11

Используя jQuery, это может быть легко:

var items = Array(523,3452,334,31,5346);
var val = 3452; // we want to replace this
var index = $.inArray(val, items); // get index of specific value

items[index] = 1010; // execute!
alert(items);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Ответ 12

Неизменный способ замены элемента в списке с использованием операторов распространения .slice метода .slice.

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

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

Убедитесь, что работает

console.log(arr)     // [ 'fir', 'next', 'third' ]
console.log(nextArr) // ['fir', 'second', 'third']

Ответ 13

Сначала перепишите свой массив следующим образом:

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

Далее, получите доступ к элементу массива через его номер индекса. Формула для определения номера индекса: n-1

Чтобы заменить первый элемент (n=1) в массиве, напишите:

items[0] = Enter Your New Number;

В вашем примере число 3452 находится во второй позиции (n=2). Таким образом, формула для определения номера индекса 2-1 = 1. Поэтому напишите следующий код, чтобы заменить 3452 на 1010:

items[1] = 1010;

Ответ 14

Вот основной ответ, превращенный в функцию многократного использования:

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

Ответ 15

Я решил эту проблему, используя циклы for и перебирая исходный массив и добавляя позиции соответствующих массивов в другой массив, а затем перебирая этот массив и изменяя его в исходном массиве, затем возвращая его, я использовал функцию стрелки, но обычную функцию будет работать тоже.

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

Ответ 16

И почему бы не просто: (JSON.stringify(arr1) === JSON.stringify(arr2))

Протестировано в консоли браузера: a2 = [1,2] a1 = [0,2] (JSON.stringify(a2) !== JSON.stringify(a1)) true a1 = [1,2] (JSON.stringify(a2) !== JSON.stringify(a1)) false

Ответ 17

var index = Array.indexOf(Array value);
        if (index > -1) {
          Array.splice(index, 1);
        }

отсюда вы можете удалить определенное значение из массива и на основе того же индекса  Вы можете вставить значение в массиве.

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

Ответ 18

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.

Ответ 19

Самый простой способ это.

var items = Array(523,3452,334,31, 5346);
var replaceWhat = 3452, replaceWith = 1010;
if (i = items.indexOf(replaceWhat)) items.splice(i, 1, replaceWith);

console.log(items);
>>> (5) [523, 1010, 334, 31, 5346]