使用 Lodash 删除数组中的元素
Removing elements in an array using Lodash
我有这个数组:
var fruits = ['Apple', 'Banana', 'Orange', 'Celery'];
我像这样使用 Lodash 的remove
:
_.remove(fruits, function (fruit) {
return fruit === 'Apple' || 'Banana' || 'Orange';
})
结果是['Apple', 'Banana', 'Orange', 'Celery']
,而我预计它会['Apple', 'Banana', 'Orange']
。为什么会这样?
因为当fruit
"Celery"
时,您正在测试:
"Celery" === 'Apple' || 'Banana' || 'Orange'
其计算结果为
false || true || true
这是true
.
不能使用该语法。要么做很长的路:
_.remove(fruits, function (fruit) {
return fruit === 'Apple' || fruit === 'Banana' || fruit === 'Orange'
});
或测试阵列成员身份:
_.remove(fruits, function (fruit) {
return _.indexOf(['Apple', 'Banana', 'Orange'], fruit) !== -1
});
这不仅限于JavaScript,实际上是一个常见的错误(例如这个问题)
您可以使用 lodash 2.0 及更高版本中_.pull
的方法
var fruits = ['Apple', 'Banana', 'Orange', 'Celery'];
_.pull(fruits, 'Apple', 'Banana', 'Orange'); // ['Celery']
document.write(fruits);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.js"></script>
从另一组中删除一组项,则有专门用于此的设置操作。 Lodash 有 https://lodash.com/docs/4.17.2#difference 它接受两个数组参数 A 和 B,并将返回另一个数组,其中包含 A 中不在 B 中的所有元素。
在你的情况下,你可以写
const fruits = ['Apple', 'Banana', 'Orange', 'Celery'];
const filteredFruits = _.difference(fruits, ['Apple', 'Banana', 'Orange']);
这将导致['Celery']
.
问题不在于 Lo-Dash;你的问题在于回调函数中的条件。这:
return fruit === 'Apple' || 'Banana' || 'Orange';
不正确。您需要实际比较fruit
与每个字符串:
return fruit === 'Apple' || fruit === 'Banana' || fruit === 'Orange';
或者,您可以使用另一个 Lo-Dash 函数使其更紧凑:
_.remove(fruits, function (fruit) {
return _.contains(['Apple', 'Banana', 'Orange'], fruit);
})
注意:在最新版本的 Lo-Dash 中,_.contains
函数已弃用。请使用_.includes
使用要比较的值数组,并检查返回的索引是否大于 -1。这表示在集合中找到了评估的值。
_.remove( fruits, function ( fruit ) {
return _.indexOf( [ "Apple", "Banana", "Orange" ], fruit ) >= 0;
});
或者,您可以使用 lo-dash 的 _.contains
方法来获取布尔响应。
采取的方法的问题在于,你没有将fruit
与每根弦进行比较;相反,唯一发生的比较是fruit
与"Apple"
,之后你自己
非空字符串强制true
(!!"Banana"
),因此是真实的。因此,以下条件将始终在"香蕉"处短路(除非fruit
严格等于 "Apple"
),返回true
:
return fruit === "Apple" || 'Banana' || "Orange";
- 在函数中添加数组元素的数值
- 访问JSON对象内部的数组元素
- 用于检查数组中是否存在元素的javascript自定义方法
- 在数组中的一个元素上设置多个值
- 从组件状态的数组中删除元素
- Mongoose-在更新中删除数组元素
- 从数组中删除元素的最佳方法是:javascript/jquery
- 数组中元素(字符串)的总和
- javascript数组元素是否知道其封闭数组
- 查找数组javascript中包含的元素类型
- 如何在javascript上向数组的对象添加新元素
- 如果数组仍在执行,async.forEach()将运行我添加到数组中的新元素
- 使用filter和map方法将数组中某些元素的第一个字母大写-JavaScript
- 一些元素没有从数组中删除
- JS.循环遍历多维数组,以计数元素在每列中的出现次数
- 将数组元素附加到FormData dos'不适用于Firefox 15
- 元素不会添加到Javascript数组中
- 如何从另一个带下划线的数组中筛选带元素的数组
- 如何将函数应用于两个数组的第 n 个元素(数组的数组)
- Js接受两个值之间的元素(数组)