JavaScript find(),传{}和不传{}有什么区别?

JavaScript find(), what is the difference of passing {} and without {}?

我有下面的例子。两个 find() 函数都有效,但我不确定第一个带有 {} 的函数是如何传递到回调函数中的。

使用

1.If {},我假设一个对象被传递到 find 函数中,但是 'title' 作为一个对象如何用于与值(1.2)进行比较。有没有大佬解释下原理,有参考就更好了。

2.I理解第二个find函数是传入object,而arr.title指的是object内部的值'array1'。我说的对吗?

const array1 = [{name:1,title:1.1}, {name:2,title:1.2}];

const found = array1.find(({title}) => title ==1.2);
const found2 = array1.find(arr => arr.title ==1.2);

console.log(found);
console.log(found2);

上面代码的结果是:

> Object { name: 2, title: 1.2 }
> Object { name: 2, title: 1.2 }

这与 Array.prototype.find 无关,而是 JavaScript 函数参数语法的一般特征。

可以使用对象或数组解构语法定义函数参数。

函数定义

 function f(x) {
   return x.p;
 }
 

声明一个函数,该函数采用名为 x 的单个清单参数。

行为相同的函数

 function f({p}) {
    return p;
 }

声明一个匿名的清单参数,并提取其 p 属性。

从调用者的角度来看,这两个函数的行为相同,实际上,如果传递的第一个参数未定义,两者都会抛出异常,如果 x 没有 p 属性,则两者都将 return 未定义,依此类推.

第二种形式纯粹是函数实现中使用的句法便利,可以提取名为 p 的 属性 并无限制地使用它。

参数解构是 JavaScript's general destructuring syntax 的一个实例,它还有其他应用程序,包括变量声明、赋值和提供默认值。

如果使用 { },我假设将 object 传递给查找函数...

这是一种叫做解构的Javascript魔法,一种特殊的语法。

发生了什么: object/s 的值正在通过它们的密钥解包。

结果: object 被传递的密钥解构。这会导致返回您在查找函数中看到的键的值。

为了更好地理解解构,您可以阅读 here or here

为了更好地理解正在发生的事情,您可能首先必须完全理解 find 函数及其工作原理。

我了解第二个查找函数正在传入 object...

发生了什么: 您正在传递所谓的回调。你基本上是说,对于我数组中的每个条目,运行 这个函数并根据我的回调(你的函数)的评估,给我输出。

结果: 这意味着,如果 title 等于 1.2 for any/each object checked,在回调的情况下 arr => arr.title ==1.2 它将计算为真,因此返回 object。

您可能会发现 this and/or this 有帮助。

解构赋值:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

const { title } = { title: 1.2 };
console.log(title);  // 1.2