被JavaScript谓词语法弄糊涂了

被JavaScript谓词语法弄糊涂了,javascript,Javascript,在typescript组件文件中,将按如下方式导入下划线.js库: import * as _ from 'underscore'; 在组件的后面部分,讲师使用以下行从照片对象数组中删除照片对象: this.photos.splice(_.findIndex(this.photos, { id: id }), 1) 我相信这行代码的作用与下面的代码相同: var i = _.findIndex(this.photos, (photo) => { photo.id == id; })

在typescript组件文件中,将按如下方式导入下划线.js库:

import * as _ from 'underscore';
在组件的后面部分,讲师使用以下行从照片对象数组中删除照片对象:

this.photos.splice(_.findIndex(this.photos, { id: id }), 1)
我相信这行代码的作用与下面的代码相同:

var i = _.findIndex(this.photos, (photo) => {
  photo.id == id;
});
this.photos.splice(i, 1);
我不明白的是怎么做

(photo) => { photo.id == id; }
沦为

{ id: id }
事实并非如此

以下函数使用一个参数(
photo
),该参数将此参数上的
id
属性与闭包上下文的
id
变量进行比较,并且不返回任何内容:

(photo) => { photo.id == id; }
但是你可能是这个意思:

(photo) => photo.id == id
这是不一样的!这相当于:

(photo) => { return photo.id == id; }
还有语法糖。它是一个函数,它接受一个参数(
photo
),并返回该参数的属性
id
与闭包上下文的
id
变量的比较结果

接下来,这只是一个具有属性
id
的对象:

{ id: id }
使其行为相似的魔力完全取决于
下划线
。它根本不是javascript的一部分

在源代码中,这两个选项被拆分。因此,基本上这是两个“重载”,它们实现方式不同,但行为方式相同。

事实并非如此

以下函数使用一个参数(
photo
),该参数将此参数上的
id
属性与闭包上下文的
id
变量进行比较,并且不返回任何内容:

(photo) => { photo.id == id; }
但是你可能是这个意思:

(photo) => photo.id == id
这是不一样的!这相当于:

(photo) => { return photo.id == id; }
还有语法糖。它是一个函数,它接受一个参数(
photo
),并返回该参数的属性
id
与闭包上下文的
id
变量的比较结果

接下来,这只是一个具有属性
id
的对象:

{ id: id }
使其行为相似的魔力完全取决于
下划线
。它根本不是javascript的一部分


在源代码中,这两个选项被拆分。所以基本上这是两个“重载”,实现方式不同,但行为相同。

这与LINQ无关。看看
.findIndex
?这与LINQ无关。看看
.findIndex
?啊,当然!非常感谢。我没有想到这只是一个超载。你是对的,这就是我的意思。我还在习惯胖箭头的语法。啊,当然!非常感谢。我没有想到这只是一个超载。你是对的,这就是我的意思。我仍然习惯于胖箭头语法。