首页 > 解决方案 > 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 被“名称”缩短:“代码”。怎么了。我仍然测试了许多括号替代方案,但没有成功。感谢您提前提供任何提示。

标签: javascript

解决方案


您很可能正在寻找一个或门||

在这个布尔表达式中,

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)

推荐阅读