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 方法是不是返回给定数组的匹配元素形式的副本或引用? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
递归确定是不是存在与给定 int 参数匹配的正 int 数组的子集和?
265 Array.prototype.find(),findIndex()
[乐意黎原创] Array.prototype.find() 与 Array.prototype.findIndex() 使用详解
[乐意黎原创] Array.prototype.find() 与 Array.prototype.findIndex() 使用详解