javascript - Array.filter 没有按预期工作,并且缩短了无效代码
问题描述
我有以下代码:
var testList = [{
"message": "Dieses Feld ist ein Pflichtfeld.",
"element": {},
"method": "required",
"name": "email"
},
{
"message": "Falscher Code!",
"element": {},
"method": "joeCode",
"name": "code"
}
];
var name = "code",
method = "joeCodexcxxc";
testList = testList.filter(x => x.name !== name && x.method !== method);
console.log(testList);
我预计不会触及测试列表,因为没有给出“&& x.method!== 方法”。但是 testList 被“名称”缩短:“代码”。怎么了。我仍然测试了许多括号替代方案,但没有成功。感谢您提前提供任何提示。
解决方案
您很可能正在寻找一个或门||
。
在这个布尔表达式中,
x.name !== name && x.method !== method
什么时候x
是你的第二个元素testList
。它评估为
"code" !== "code" && "joeCode" !== "joeCodexcxxc"
哪个是false && true
,哪个是false
- 因此这个对象被过滤掉了。
尝试||
改为 -
x.name !== name || x.method !== method
或者,为了使这种情况更易于人类理解,应用德摩根定律
!(x.name === name && x.method === method)
推荐阅读
- java - 使用可变运行时间估计剩余时间
- php - PHPSpreadsheet - 如何创建一个额外的选项卡?
- apache-spark - _spark_metadata 目录有什么用
- html - 如何使用if从按钮编辑div的样式?
- java - JavaFX SplitPane 不会冒泡鼠标事件
- git - Jenkins 脚本化管道以触发每个新提交
- python-3.x - 如何将函数中的变量传递给 columns.str.replace 命令?
- dart - 如何执行昂贵的渲染
- python - 从两个 Pygame 精灵射出的“子弹”组合成一条长线
- vue.js - Vue资源(GET)不发送标头