代码之家  ›  专栏  ›  技术社区  ›  dwjohnston

有“if array.find”的缩写吗?

  •  1
  • dwjohnston  · 技术社区  · 7 年前

    我想说的是:

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

    是否有一个速记表达式,我可以做的地方,我可以评估是否找到一个项目,并使用块内的项目?

    类似于:

    if (const item = arr.find(v => v.id ===2) {
        console.log(item); 
    }
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   CertainPerformance    7 年前

    是的,只需对代码进行一个简单的调整-更改 item 到A let 宣布 外部 如果 if 以便在以下条件下重新分配:

    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));
        2
  •  1
  •   Phix    7 年前

    有意思…虽然原作并不长,但四处看看还是挺有趣的。不是超短而是什么。

    for (let item = arr.find(v => v.id === 2);item;) {
        console.log('Found', item); 
        break;
    }
    
        3
  •  1
  •   choz    7 年前

    如果你只是想用 item 在你的内心 if 布洛克,你不需要 var , let const . 但是,缺点是变量将被全局绑定。

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