Javascript reduce()&;find()抛出类型错误-无法读取属性';查找';未定义的

Javascript reduce()&;find()抛出类型错误-无法读取属性';查找';未定义的,javascript,find,reduce,Javascript,Find,Reduce,我试图遍历一个包含多个数字的数组,并返回一个包含所有这些数字但没有重复的数组。我必须使用JavaScript的reduce和find方法。我该怎么做 我试图这样做: var numbers = [1, 1, 2, 3, 4, 4]; function unique(numbers) { var result = numbers.reduce(function(resultsArray, number) { resultsArray.find(function(numberInRes

我试图遍历一个包含多个数字的数组,并返回一个包含所有这些数字但没有重复的数组。我必须使用JavaScript的
reduce
find
方法。我该怎么做

我试图这样做:

var numbers = [1, 1, 2, 3, 4, 4];

function unique(numbers) {
  var result = numbers.reduce(function(resultsArray, number) {
    resultsArray.find(function(numberInResultsArray) {
      if (numberInResultsArray === number) {
        return true;
      }
    });
  }, []);

  return result;
}

unique(numbers);
…但它给了我一个
类型错误

TypeError:无法读取未定义的属性“find”

我的数组似乎没有定义,但我不明白为什么没有定义。有什么建议吗?

的返回值将在下一个调用/步骤中变成
resultsArray
的值。由于回调没有return语句,因此在第二次调用回调时,最初为空的数组
[]
未定义

如果要将数组减少到其唯一值,我建议使用以下方法:
功能唯一(数字){
返回[…新集合(编号)];
}
//例如:
log(惟一的([1,1,2,3,4,4])的返回值将在下一个调用/步骤中成为
resultsArray
的值。由于回调没有return语句,因此在第二次调用回调时,最初为空的数组
[]
未定义

如果要将数组减少到其唯一值,我建议使用以下方法:
功能唯一(数字){
返回[…新集合(编号)];
}
//例如:

log(惟一的([1,1,2,3,4,4])您可以使用reduce完成,但不需要像这样查找。这样,您只能在对象中创建不能复制的关键点。生成所有键后,返回它们。这将生成O(n)解,该解是有效的

var数=[1,1,2,3,4,4];
函数唯一(数字){
var obj=数字。减少(函数(o,n){
o[n]=“val”;
返回o;
}, {});
返回Object.keys(obj);
}
var ans=唯一(数字);
ans=ans.map(编号);

控制台日志(ans)您可以使用reduce完成,但不需要像这样查找。这样,您只能在对象中创建不能复制的关键点。生成所有键后,返回它们。这将生成O(n)解,该解是有效的

var数=[1,1,2,3,4,4];
函数唯一(数字){
var obj=数字。减少(函数(o,n){
o[n]=“val”;
返回o;
}, {});
返回Object.keys(obj);
}
var ans=唯一(数字);
ans=ans.map(编号);

控制台日志(ans)数组已定义,find方法返回undefined。请阅读以下内容:@jsw324
.reduce()
函数返回未定义在第一次迭代后,如果已定义数组,则find方法返回未定义。请阅读以下内容:@jsw324第一次迭代后返回undefined的
.reduce()
函数是问题所在不使用集合的原因是对象。使用
.reduce()
.find()
可以根据属性值筛选唯一的对象。这两种方法是不能互换的。@mhodges很好。但在许多情况下(如OP所示),这些值要么是基本体,要么可以映射到基本体。@le_m Yup,你说得对。只是想指出为什么有人可能需要
.reduce()
.find()
供未来的观众观看。不使用集合的原因是对象。使用
.reduce()
.find()
可以根据属性值筛选唯一的对象。这两种方法是不能互换的。@mhodges很好。但在许多情况下(如OP所示),这些值要么是基本体,要么可以映射到基本体。@le_m Yup,你说得对。我只是想指出为什么有人可能需要
.reduce()
.find()
供未来的观众观看。您的第一个解决方案是将数字转换为字符串。例如,使用
函数unique(numbers){return Object.values(numbers.reduce(function(o,n){o[n]=n;return o;},{},{}));}
-关于第二个解决方案,我建议在reduce回调中声明
val
,并重命名为
includes
o.e.,以提高可读性。@leu m谢谢!征求意见。我们修改了代码。但是,我没有使用
Object.values()
,而是使用了
map()
。另外,find看起来比includes更好,includes类似于函数名。您的第一个解决方案将数字转换为字符串。例如,使用
函数unique(numbers){return Object.values(numbers.reduce(function(o,n){o[n]=n;return o;},{},{}));}
-关于第二个解决方案,我建议在reduce回调中声明
val
,并重命名为
includes
o.e.,以提高可读性。@leu m谢谢!征求意见。我们修改了代码。但是,我没有使用
Object.values()
,而是使用了
map()
。而且,find看起来比includes更好,includes类似于函数名。