JavaScript中数组.find()上的链接
我养成了一种习惯,根据上下文,将我的一些JavaScript中数组.find()上的链接,javascript,arrays,Javascript,Arrays,我养成了一种习惯,根据上下文,将我的一些for循环转换为使用array.find()。在这样做的过程中,我想知道是否有一种方法可以在.find()之后链接另一个操作符,以限制从对象获取的量 例如,请参见以下内容: currentStage = customerDoc.history.find(h => h.completed === false); currentStageName = currentStage.name; 既然我真正想要的是“currentStage.name”的值,那
for循环
转换为使用array.find()
。在这样做的过程中,我想知道是否有一种方法可以在.find()
之后链接另一个操作符,以限制从对象获取的量
例如,请参见以下内容:
currentStage = customerDoc.history.find(h => h.completed === false);
currentStageName = currentStage.name;
既然我真正想要的是“currentStage.name”的值,那么有没有一种方法可以通过在我的
find()
之后链接来获得这个值,以指定我只想要这个属性?如果没有,是否有其他方法在一行中执行此操作?是的,您可以这样做,请注意使用|{}
以避免在查找返回未定义时出现异常
currentStage = (customerDoc.history.find(h => h.completed === false) || {}).name
但在我看来,你应该像现在一样保存它,它可读性强,易于维护
currentStage = customerDoc.history.find(h => h.completed === false);
currentStageName = currentStage && currentStage.name;
用于在未找到任何对象的情况下使用默认对象,并获取所需的属性。如果未找到任何内容,则结果将是未定义:
const { name: currentStageName } = customerDoc.history.find(h => h.completed === false) || {};
您可以使用可选链接(目前是第3阶段TC39提案,尚未在浏览器中实现),但现在可以使用插件使用,并按如下方式使用:
const currentStageName = customerDoc.history.find(h => !h.completed)?.name;
您还可以将.map链接到find结果上,以限制和/或重塑返回的内容,方法是将其包装在数组中(如果找不到结果,则使用过滤器),例如
.find(…).name
@epascarello尽管我同意,如果find()
没有找到任何东西,就会抛出异常。@zero298就像上面的代码一样;)如果.find不能匹配任何内容,则返回undefined,最好确保currentStage
未定义。这可以简单到currentStageName=currentStage&¤tStage.name代码>谢谢,是的,这是一个公平的观点。有时清晰度胜过超简洁。在JS?。
中存在操作符?这是TC39中的第3阶段建议。为了使用它,您需要运行它。我能找到的最好的方法是,目前没有浏览器支持可选的链接。我更喜欢解构方法,因为它将所有内容都保存在一行中,缺点是会产生更长、更复杂的代码行。
currentStage = [customerDoc.history.find(h => h.completed === false)].filter(h => h != undefined).map(h => ({'name':h.name}))[0]