美文网首页Web 前端开发 让前端飞
【Javascript】库存更新程序

【Javascript】库存更新程序

作者: 雨水之后 | 来源:发表于2017-11-28 16:26 被阅读0次

    依照一个存着新进货物的二维数组,更新存着现有库存(在curInv中)的二维数组。如果货物已存在则更新数量,如果没有对应货物则把其加入到数组中,更新最新的数量。返回当前的库存数组,且按货物名称的字母顺序排列。

    function updateInventory(curInv, newInv) {
    
      //遍历两个数组,如果碰见商品名字一样的,就为curInv中该商品的数量相加
      //相加之后,在newInv中删掉这个商品,避免后续操作重复  
      curInv.forEach(function(elementC,indexC){
    
        newInv.forEach(function(elementN,indexN){
    
          if(elementN[1]===elementC[1]){
            elementC[0] += elementN[0];
            newInv.splice(indexN,1);
          }
    
        });
    
      });
    
      //连接两个数组
      curInv = curInv.concat(newInv);
    
      //写函数,让二位数组按照其名字首字母排列
      function letterSort(arr){
    
        arr.forEach(function(e,i){
          arr[i].unshift(arr[i][1]);
          arr[i].pop();
        });
    
        arr.sort();
    
        arr.forEach(function(e,i){
          arr[i].unshift(arr[i][1]);
          arr[i].pop();
        });
    
        return arr;
    
      }
    
      return letterSort(curInv);
    
    }
    
    //例子
    var curInv = [
        [21, "Bowling Ball"],
        [2, "Dirty Sock"],
        [1, "Hair Pin"],
        [5, "Microphone"]
    ];
    
    var newInv = [
        [2, "Hair Pin"],
        [3, "Half-Eaten Apple"],
        [67, "Bowling Ball"],
        [7, "Toothpaste"]
    ];
    
    updateInventory(curInv, newInv);
    
    /*结果
    [ 
      [ 88, 'Bowling Ball' ],
      [ 2, 'Dirty Sock' ],
      [ 3, 'Hair Pin' ],
      [ 3, 'Half-Eaten Apple' ],
      [ 5, 'Microphone' ],
      [ 7, 'Toothpaste' ] 
    ]
    */
    

    关于letterSort(arr),我采用的方法是,先把内部数组两个元素的位置对调,然后sort()之后再对调回来的方法。

    总感觉这么做好像有点拖拖拉拉,如果有谁能够有更好的方法,求分享,谢谢。

    THE END.

    相关文章

      网友评论

        本文标题:【Javascript】库存更新程序

        本文链接:https://www.haomeiwen.com/subject/qfdebxtx.html