bar*_*ard 23 javascript lodash
我有这个数组:
var fruits = ['Apple', 'Banana', 'Orange', 'Celery'];
Run Code Online (Sandbox Code Playgroud)
我使用Lodash是remove这样的:
_.remove(fruits, function (fruit) {
return fruit === 'Apple' || 'Banana' || 'Orange';
})
Run Code Online (Sandbox Code Playgroud)
结果是['Apple', 'Banana', 'Orange', 'Celery'],虽然我期待它['Apple', 'Banana', 'Orange'].为什么会这样?
Ama*_*dan 50
因为当fruit是"Celery",你正在测试:
"Celery" === 'Apple' || 'Banana' || 'Orange'
Run Code Online (Sandbox Code Playgroud)
评估为
false || true || true
Run Code Online (Sandbox Code Playgroud)
是的true.
您无法使用该语法.要么做得很远:
_.remove(fruits, function (fruit) {
return fruit === 'Apple' || fruit === 'Banana' || fruit === 'Orange'
});
Run Code Online (Sandbox Code Playgroud)
或测试数组成员资格:
_.remove(fruits, function (fruit) {
return _.indexOf(['Apple', 'Banana', 'Orange'], fruit) !== -1
});
Run Code Online (Sandbox Code Playgroud)
这不仅限于JavaScript,实际上是一个常见的错误(例如这个问题)
小智 33
您可以使用_.pulllodash 2.0及更高版本中的方法
var fruits = ['Apple', 'Banana', 'Orange', 'Celery'];
_.pull(fruits, 'Apple', 'Banana', 'Orange'); // ['Celery']
document.write(fruits);Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.js"></script>Run Code Online (Sandbox Code Playgroud)
如果要从另一个集合中删除一组项目,则会有专门为此设置的集合操作.Lodash有https://lodash.com/docs/4.17.2#difference,它接受两个数组参数A和B,并返回另一个数组,其中包含A中不存在的所有A元素.
在你的情况下,你可以写
const fruits = ['Apple', 'Banana', 'Orange', 'Celery'];
const filteredFruits = _.difference(fruits, ['Apple', 'Banana', 'Orange']);
Run Code Online (Sandbox Code Playgroud)
这将导致['Celery'].
问题不在于Lo-Dash; 问题在于你的回调函数中的条件.这个:
return fruit === 'Apple' || 'Banana' || 'Orange';
Run Code Online (Sandbox Code Playgroud)
是不正确的.你需要实际比较fruit每个字符串:
return fruit === 'Apple' || fruit === 'Banana' || fruit === 'Orange';
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用另一个Lo-Dash函数使其更紧凑:
_.remove(fruits, function (fruit) {
return _.contains(['Apple', 'Banana', 'Orange'], fruit);
})
Run Code Online (Sandbox Code Playgroud)
注意:在最新版本的Lo-Dash中,_.contains不推荐使用该功能.请用_.includes
| 归档时间: |
|
| 查看次数: |
70995 次 |
| 最近记录: |