【问题标题】: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 的工作原理。请参阅我在之前评论中添加的链接。

标签: javascript arrays pass-by-reference pass-by-value


【解决方案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

        【讨论】:

          猜你喜欢
          • 2013-04-15
          • 1970-01-01
          • 2011-12-29
          • 2018-04-14
          • 2019-09-06
          • 1970-01-01
          • 2012-10-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多