Удаление элементов с Array.map в JavaScript

Причины, почему селекторы на основе id не работают

  1. Элемент / DOM с указанным идентификатором еще не существует.
  2. Элемент существует, но он не является зарегистрированный в DOM [в случае, если HTML-узлы динамически добавляются из ответов Ajax].
  3. Присутствует более одного элемента с тем же идентификатором, который вызывает конфликт.

Решения

  1. Попробуйте получить доступ к элементу после его объявления или, альтернативно, использовать такие вещи, как $(document).ready();
  2. . Для элементов, исходящих из ответов Ajax, используйте метод .bind() для jQuery. В старых версиях jQuery для этого было .live().
  3. Используйте инструменты [например, плагин webdeveloper для браузеров], чтобы найти дубликаты идентификаторов и удалить их.
74
задан Aᴍɪʀ 22 December 2016 в 06:03
поделиться

6 ответов

Необходимо использовать filter метод, а не карта, если Вы не хотите видоизменить объекты в массиве, в дополнение к фильтрации.

, например,

var filteredItems = items.filter(function(item)
{
    return ...some condition...;
});

[Редактирование: Конечно, Вы могли всегда делать sourceArray.filter(...).map(...), чтобы и отфильтровать и видоизмениться]

91
ответ дан olliej 24 November 2019 в 11:58
поделиться

Это не то, что делает карта. Вы действительно хотите Array.filter. Или если Вы действительно хотите удалить элементы из исходного списка, Вы собираетесь должны сделать это обязательно с для цикла.

10
ответ дан Patrick 24 November 2019 в 11:58
поделиться

Необходимо отметить однако, что эти Array.filter не поддерживается во всем браузере так, Вы должны к смоделированному:

//This prototype is provided by the Mozilla foundation and
//is distributed under the MIT license.
//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license

if (!Array.prototype.filter)
{
    Array.prototype.filter = function(fun /*, thisp*/)
    {
        var len = this.length;

        if (typeof fun != "function")
            throw new TypeError();

        var res = new Array();
        var thisp = arguments[1];

        for (var i = 0; i < len; i++)
        {
            if (i in this)
            {
                var val = this[i]; // in case fun mutates this

                if (fun.call(thisp, val, i, this))
                   res.push(val);
            }
        }

        return res;
    };
}

И выполнение так, можно моделировать любой метод, в котором Вы, возможно, нуждаетесь.

2
ответ дан Markus Safar 24 November 2019 в 11:58
поделиться

следующее утверждение чистит объект с помощью функции карты.

var arraytoclean = [{v:65, toberemoved:"gronf"}, {v:12, toberemoved:null}, {v:4}];
arraytoclean.map((x,i)=>x.toberemoved=undefined);
console.dir(arraytoclean);
0
ответ дан 24 November 2019 в 11:58
поделиться

Я просто записал пересечение массива, которое правильно обрабатывает также дубликаты

https://gist.github.com/gkucmierz/8ee04544fa842411f7553ef66ac2fcf0

// array intersection that correctly handles also duplicates

const intersection = (a1, a2) => {
  const cnt = new Map();
  a2.map(el => cnt[el] = el in cnt ? cnt[el] + 1 : 1);
  return a1.filter(el => el in cnt && 0 < cnt[el]--);
};

const l = console.log;
l(intersection('1234'.split``, '3456'.split``)); // [ '3', '4' ]
l(intersection('12344'.split``, '3456'.split``)); // [ '3', '4' ]
l(intersection('1234'.split``, '33456'.split``)); // [ '3', '4' ]
l(intersection('12334'.split``, '33456'.split``)); // [ '3', '3', '4' ]
0
ответ дан 24 November 2019 в 11:58
поделиться

Array Метод фильтра

 var arr = [1, 2, 3] // синтаксис ES5 arr = arr.filter (function (item) {return item! = 3}) // синтаксис ES2015 arr = arr.filter (item => item! = 3) console.log (arr) 
5
ответ дан 24 November 2019 в 11:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: