【Javascript】库存更新程序

依照一个存着新进货物的二维数组,更新存着现有库存(在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】库存更新程序)