【freecodecamp】更新仓库 Inventory Update

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/towrabbit/article/details/81586797

题目要求

freecodecamp 上面的一个练习题
题目要求是:
依照一个存着新进货物的二维数组,更新存着现有库存(在 arr1 中)的二维数组. 如果货物已存在则更新数量 . 如果没有对应货物则把其加入到数组中,更新最新的数量. 返回当前的库存数组,且按货物名称的字母顺序排列.

当你遇到困难的时候,记得查看错误提示、阅读文档、搜索、提问。

问题分析

1.更新的顺序要按照后面的数组来(for 循环)
2.在进行的过程中仓库也是会改变的
3.同样类型的话增加数量 否则在仓库中添加一个新的数组
4,添加完毕之后的数组要根据名字来进行排序

代码解决方案

1.一个添加新物品的函数,根据是否已经存在将单个数组元素添加进数组中

function updateSingle(singleArr){//输入为单个数组 arr1为全局变量中的仓库
  for(var j = 0 ; j < arr1.length;j++){
    if(singleArr.indexOf(arr1[j][1])>-1){//如果存在名字相同 只增加数量
      arr1[j][0] = arr1[j][0] + singleArr[0];
      return console.log('yes!');//直接返回 不运行下面的代码
    }
  }
  console.log('no');//原有仓库中没有 将数组作为元素添加进仓库(arr1)
  arr1.push(singleArr);
}

2.添加更新并且仓库

for(var x = 0; x < arr2.length; x++){
  updateSingle(arr2[x]);
}//这个运行完之后arr1的仓库就是最新的了

3.根据名字来进行排序

arr1.sort(function(value1,value2){
  var a = value1[1];
  var b = value2[1];
  a = a.toLowerCase();
  b = b.toLowerCase();
  return a > b;
});

完整代码:

function updateInventory(arr1, arr2) {
    function updateSingle(singleArr){
      for(var j = 0 ; j < arr1.length;j++){
        if(singleArr.indexOf(arr1[j][1])>-1){
          arr1[j][0] = arr1[j][0] + singleArr[0];
          return false;
        }
      }
      arr1.push(singleArr);
    }
    for(var x = 0; x < arr2.length; x++){
      updateSingle(arr2[x]);
    }
    arr1.sort(function(value1,value2){
      var a = value1[1];
      var b = value2[1];
      a = a.toLowerCase();
      b = b.toLowerCase();
      return a >b;
    });
    console.log(arr1);
    return arr1;
}

// 仓库库存示例
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);

角角兔towrabbit
欢迎评论点赞哦 ,评论还能给自己加分呢

猜你喜欢

转载自blog.csdn.net/towrabbit/article/details/81586797
今日推荐