Почему я не могу использовать функцию удаления() из lodash?

Я использую Ларавель 5.5. Я запускал npm install и npm run dev, и в целом у меня хорошая рабочая среда с работающим Javascript, но я был пойман при попытке использовать функцию lodash remove() для удаления элемента из массива.

var array = [1, 2, 3, 4];
var evens = _.remove(array, function(n) {
    return n % 2 == 0;
});

Приведенный выше код выдает следующую ошибку:

TypeError: _.remove is not a function

Lodash загружается в resources/assets/js/bootstrap.js.

window._ = require('lodash');

Другие методы lodash работают нормально.

_.each([1, 2], function(n) {
    console.log(n);
});

Есть идеи, почему я не могу использовать .remove()?


person Kebian    schedule 19.09.2017    source источник
comment
Какая версия lodash находится внутри вашего package.json?   -  person Ferrybig    schedule 19.09.2017
comment
laravel-mix имеет зависимость от lodash: ^4.17.4 внутри своего package.json.   -  person Kebian    schedule 19.09.2017


Ответы (1)


Проблема заключалась в том, что я также использую Laravel Spark. Spark не использует resources/assets/js/bootstrap.js и вместо этого загружает собственный бутстрап в vendor/laravel/spark/resources/assets/js/spark-bootstrap.js.

Для начальной загрузки Spark фактически требуется пакет underscore вместо lodash, отсюда и путаница.

window._ = require('underscore');
person Kebian    schedule 19.09.2017
comment
Не было бы проще, если бы вы явно требовали lodash вместо того, чтобы полагаться на глобальный идентификатор? import _ from 'lodash'; должно быть достаточно в каждом модуле, где вы хотите использовать lodash. - person Mjh; 19.09.2017
comment
Фреймворки Laravel и Spark специально устанавливают и используют window._, что, конечно же, является глобальным. Я просто хотел повторно использовать существующий экземпляр. Я лично рад использовать подчеркивание, но да, импорт lodash в другую переменную является вариантом. - person Kebian; 20.09.2017