Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中数组.find()上的链接_Javascript_Arrays - Fatal编程技术网

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]