使用 every 时如何跳过一个元素

How to skip an element when using every

我有一个对象:

obj = {name:null, lastName:null, scores:[]}

我需要迭代并检查是否所有字段都为 null ,分数字段除外。我需要跳过那个。

我正在使用

  Object.values(obj).every(x=> x===null) 

在添加分数之前,但我现在不确定如何跳过该字段。因为无论分数数组是否为空,如果所有其他字段都为空,我需要 return true.

欢迎任何建议

您可以 filter 您不想检查的键:

Object.keys(obj)
    .filter(k => k !== "scores")
    .every(k => obj[k] === null);

可以将每个条件的两个条件结合起来(对于您不想检查的键,只是 return 为真)但我选择将逻辑分开.

如果你可以使用 ES7(如果你不能,也可以使用垫片)你可以使用它来避免对对象进行两次迭代:

Object.entries(obj).every(([k, v]) => v === null || k === 'scores');

Object.entries 适用于除 MSIE 以外的所有当前主流浏览器。

Object.entries 的另一个优点是,由于回调同时传递了键和值,因此无需在回调中访问 obj,这反过来又强制使用在 obj 上形成闭包的内联函数。使用 .entries() 完全可以使回调成为一个单独的函数,如果代码变得更长,或者如果在多个地方需要回调逻辑,这将尤为重要。