Array.find 方法是不是返回给定数组的匹配元素形式的副本或引用? [关闭]

Posted

技术标签:

【中文标题】Array.find 方法是不是返回给定数组的匹配元素形式的副本或引用? [关闭]【英文标题】:Does Array.find method return a copy or a reference of the matched element form given array? [closed]Array.find 方法是否返回给定数组的匹配元素形式的副本或引用? [关闭] 【发布时间】:2020-10-11 07:05:49 【问题描述】:

什么 Array.find 方法返回值是找到值的特定副本或数组中的引用。我的意思是它返回给定数组中匹配元素的值或引用。

【问题讨论】:

你的意思是array.find 是的,我已通过邮寄方式进行了更正。 “复制”具体是什么意思?为什么你特别想知道.find()?您的问题看起来与 Is javascript a pass-by-reference or pass-by-value language? 重复,但我并不完全相信。 新实例与其所属的数组无关。主要是传值 @MDJahidHasan JavaScript 是按值传递的,所以你会总是得到一个值。但该值可能是对对象的引用。但这与Array.prototype.find() 函数完全无关。这就是 JavaScript 的工作原理。请参阅我在之前评论中添加的链接。 【参考方案1】:

来自MDN(强调他们的):

find() 方法返回第一个元素 提供的数组,满足提供的测试功能。

无论是返回值的副本还是引用都将遵循正常的 JavaScript 行为,即,如果它是原始类型,它将是一个副本,或者如果它是一个复杂类型,它将是一个引用。

let foo = ['a', bar: 1];
let a = foo.find(val => val === 'a');
a = 'b';
console.log(foo[0]); //still "a"
let obj = foo.find(val => val.bar);
obj.bar = 2;
console.log(foo[1].bar); //2 - reference

【讨论】:

【参考方案2】:

这是一个棘手的问题。

从技术上讲,find 总是返回一个值,但如果您要查找的项目是一个对象,该值可能是一个引用。尽管如此,它仍然是一个值。

这与这里发生的事情类似:

let a =  some: "object" ;

let b = a;

您正在将变量a复制到b。碰巧该值是对象 some: "object" 引用

【讨论】:

【参考方案3】:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

find() 方法返回提供的数组中满足提供的测试功能的第一个元素的值。

const obj = 

console.log(obj.find)

const arr = ['a', 'b', 'c']

console.log(arr.find(e => e === 'a'))
console.log(arr.find(e => e ==='c'))

【讨论】:

【参考方案4】:

返回值

find() 方法返回数组中第一个通过测试的元素的值(作为函数提供)。

find() 方法对数组中存在的每个元素执行一次函数:

如果找到函数返回真值的数组元素,find() 返回该数组元素的值(并且不检查剩余值) 否则返回未定义

Click Here

【讨论】:

以上是关于Array.find 方法是不是返回给定数组的匹配元素形式的副本或引用? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

js 中判断数组中是不是包含某个元素

递归确定是不是存在与给定 int 参数匹配的正 int 数组的子集和?

265 Array.prototype.find(),findIndex()

[乐意黎原创] Array.prototype.find() 与 Array.prototype.findIndex() 使用详解

[乐意黎原创] Array.prototype.find() 与 Array.prototype.findIndex() 使用详解

给定数组,编写一个查找最大值并返回匹配字符串的函数