代码之家  ›  专栏  ›  技术社区  ›  hamburger

数组.filter不按预期工作,正在缩短无效代码

  •  -1
  • hamburger  · 技术社区  · 4 年前

    我有以下代码:

    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);

    但是testList被“name”:“code”缩短。 怎么了。 提前给你提示。

    2 回复  |  直到 4 年前
        1
  •  2
  •   Chase    4 年前

    你很可能在找一个或门 || 相反。

    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)
    
        2
  •  0
  •   Adam Specker    4 年前

    对于第二个对象,条件的计算结果为false,因为name==“code”,因此我们有false&true(计算结果为false)。您可能打算使用| |或运算符。