【Javascript】在庫更新プログラム

1572 ワード

新しい貨物が保存されている二次元配列にしたがって、既存の在庫(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)について、私が採用した方法は、まず内部配列の2つの要素の位置を合わせてからsort()を戻します.
いつもこのようにするのは少しずるずるしているような気がします.誰かもっといい方法があれば、教えてください.ありがとうございます.
THE END.