使用 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()
完全可以使回调成为一个单独的函数,如果代码变得更长,或者如果在多个地方需要回调逻辑,这将尤为重要。
我有一个对象:
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()
完全可以使回调成为一个单独的函数,如果代码变得更长,或者如果在多个地方需要回调逻辑,这将尤为重要。