如何简化此更新函数数组代码?

Posted

技术标签:

【中文标题】如何简化此更新函数数组代码?【英文标题】:How do I simplify this update function array code? 【发布时间】:2021-11-18 21:33:30 【问题描述】:

我有更新数组功能,如果可能的话,我想简化这段代码。 这个更新函数是关于更新和比较数组的值。 数据将在fruit_temp 内部进行比较 fruit_temp fruit_db_id 的示例数据是和数据库中现有的id。

fruit_temp = [
    fruit_db_id: 71,
    fuit_id    : 1,
    name       : 'papaya'
  , 
    fruit_db_id: 73,
    fuit_id    : 3,
    name       : 'apple'
  ];

我将获取并读取fruit_temp 值,当它执行更新功能时,它将比较现有值和将插入的新值。这是此更新功能的解决方案。我只是想知道这段代码是否可以简化。

const updateFruit = () =>
  
        finalFruit_temp     = [];
        let fruit            = $('#fruit').val(); //getting fruit value

        fruit = fruit.map(Number); //convert string value to integer

        fruit.map((el) =>
            let fruitData = fruit_temp.filter((e) => e.id === el)[0]; //return index if compare true

            finalFruit_temp.push(
                "fruit_db_id"  :(fruitData == undefined) ? null : fruitData.fruit_db_id,
                "fruit_id"     :(fruitData == undefined) ? el : fruitData.id,
                "status"       :true
            );

        );

        fruit_temp.map((el) =>
            let checkedFruit= fruit.includes(el.id);

            if(checkedFruit == false)
            
                finalFruit_temp.push(

                "fruit_db_id"  :el.db_id,
                "fruit_id"     :el.id,
                "status"       :false

                );
            
        

        );
    

【问题讨论】:

据我所知,这里没有什么可以简化的。如果要减少,请删除空行上的 cmets 和换行符????。好吧,这个问题在这里没有必要。同样,删除箭头函数 (el) =>e => 中仅 1 个参数的中断 不返回任何内容的Array.prototype.map() 应该是Array.prototype.forEach() 或(我的偏好)一个简单的for (const el of ...) ... 循环。 我只是想知道如果对象中没有id,为什么可以使用el.Id或e.id?我只看到一个fruit_id 【参考方案1】:

这段代码看起来很简单,但我看到你可以做一些事情来让它更短。在一行中定义变量并更改最后一个条件语句。

const updateFruit = () =>  
  
  finalFruit_temp = [];
  let fruitData, fruit = $('#fruit').val().map(Number); 

  fruit.map((el) => 
    fruitData = fruit_temp.filter((e) => e.id === el)[0]; 
    finalFruit_temp.push(
        "fruit_db_id"  :(fruitData == undefined) ? null : fruitData.fruit_db_id,
        "fruit_id"     :(fruitData == undefined) ? el : fruitData.id,
        "status"       :true
    );
  );

  fruit_temp.map((el) => 
      if(!fruit.includes(el.id))
          finalFruit_temp.push(
            "fruit_db_id"  :el.db_id,
            "fruit_id"     :el.id,
            "status"       :false
          );
      
  );

【讨论】:

以上是关于如何简化此更新函数数组代码?的主要内容,如果未能解决你的问题,请参考以下文章

Python 优化:如何简化此代码?

用于简单数组更新的 Jax vmap

巧用PropertyInfo简化和改善代码

如何使用 SheetView 函数调用更新 ContentView 中的变量?

简化代码的总结

如何更新使用已弃用 each() 函数的代码?