javascript - `if Array.find` 有简写吗?

标签 javascript

我想做相当于这样的事情:

const arr = [{id: 1}, {id: 2}, {id: 3}]; 

const item = arr.find(v => v.id===2); 

if (item) {
   console.log(item); 
}

是否有一个简写表达式可以让我既可以评估是否找到某个项目,又可以在 block 内使用该项目?

类似于:

if (const item = arr.find(v => v.id ===2) {
    console.log(item); 
}

最佳答案

是的,只需对代码进行简单的调整 - 将 item 更改为在 if 条件下声明于外部let > 以便可以在条件下重新分配:

const arr = [{id: 1}, {id: 2}, {id: 3}];
// not actually necessary, but leaving it out will implicitly assign to global object:
let item;
if (item = arr.find(v => v.id ===2)) {
    console.log(item); 
}

也就是说,我不推荐它 - 分配给条件内的变量是一种代码味道。我更喜欢您的原始版本,其中 .find 在外部完成。

如果您愿意,您也可以为类似的事情创建自己的函数。函数定义并不小,但现在您可以简洁地调用它:

function findAnd(arr, condition, callback) {
  const item = arr.find(condition);
  if (item) callback(item);
}

const arr = [{id: 1}, {id: 2}, {id: 3}];
findAnd(arr, v => v.id === 2, item => console.log(item));

关于javascript - `if Array.find` 有简写吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52979845/

相关文章:

javascript - 根据我的要求限制用户检查复选框

javascript - Epic 2018 SMART on FHIR 授权请求 请求登录

javascript - 使用 html5/javascript 将键盘设置为即使在 "go"按下时也保持打开状态?

javascript 和 jshint,未定义

javascript - 为 Javascript 模块启动代码

javascript - jQuery 根据属性更改值

javascript - 我是否需要在异步函数中的每个语句之前放置await?

javascript - 表格输出 "values"不正确?

javascript - 如何将输入标签更改为文本区域标签

javascript - ionic1 同一页面上的 2 个 slider 及其更改特定幻灯片的事件