将array.find的结果分配给变量时,为什么会变得未定义?

时间:2019-10-29 13:52:27

标签: javascript arrays find

我已经在一个回调中放置了一个断点,在该回调中我应该对一个对象数组进行搜索。 array.find语句返回我期望的元素,但是如果我尝试将此结果分配给变量,则会得到“未定义”

let resultCallback = function(data) {
  var el = form.texts.find(text => {
    text.options.name === this.options.name;
  }, that);// breakpoint is here
//in console, form.texts.find(text => {text.options.name === this.options.name}, that); returns the element I"m looking for
// but el still is 'undefined'

};

我不确定我是否使用了任何保留的变量名,但是更改名称并不能解决问题。查看文档时,我发现可以将find的结果分配给变量,所以我不确定这里出了什么问题。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

您的find函数不返回任何内容,这默认情况下意味着它返回undefined。要么丢失第2-4行的代码块,要么在text.options.name === this.options.name;

之前使用return语句

使用箭头功能时,如果定义块,则需要return关键字。否则,它将在箭头之后立即返回表达式。

答案 1 :(得分:0)

您对上下文有疑问。您使用的此对象的上下文属于resultCallback函数,因为它不是箭头函数。我不知道该函数在哪里声明,但尝试首先将其更改为箭头函数。即

let resultCallback = (data) => {
  var el = form.texts.find(text => 
    text.options.name === this.options.name, that
  );
};

您要将此对象引用作为第二个参数传递给find,这是不必要的,因为在调用resultCallback函数时,您没有将“ that”作为参数传递给该函数。并且还从箭头功能中删除了冰壶,以便返回比较结果。