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

时间:2019-02-26 09:29:58

标签: javascript arrays ecmascript-6 ecmascript-7

我有一个对象:

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

我需要迭代并检查除scores字段以外的所有字段是否为null。我需要跳过它。

我正在使用

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

在添加分数之前,但是我不确定现在如何跳过该字段。因为不管scores数组是否为空,如果其他所有字段都为null,则需要返回true。

任何建议都值得赞赏

2 个答案:

答案 0 :(得分:5)

您可以filter不想检查的键:

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

可以将每个条件中的两个条件组合在一起(对于您不想检查的键只返回true),但是我选择将逻辑分开。 < / p>

答案 1 :(得分:4)

如果您可以使用ES7(如果无法使用则可以使用垫片),则可以使用它来避免对对象进行两次迭代:

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

Object.entries可在除MSIE之外的所有当前主流浏览器中使用。

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