Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何基于JavaScript中的另一个数组比较和更新此数组?_Javascript_Arrays - Fatal编程技术网

如何基于JavaScript中的另一个数组比较和更新此数组?

如何基于JavaScript中的另一个数组比较和更新此数组?,javascript,arrays,Javascript,Arrays,我正在免费的CodeCamp.com上做这个 挑战指出: 将存储在二维数组中的资源清册与第二个资源清册进行比较和更新 新交付的2D阵列。更新当前的现有库存 项目数量(以arr1为单位)。如果找不到项目,请添加新项目 将物料和数量输入到库存数组中。退回的存货 数组应按项目按字母顺序排列 当我尝试时: updateInventory([[21, "Bowling Ball"], [2, "Dirty Sock"], [1, "Hair Pin"], [5, "Microphone"]], [[2,

我正在免费的CodeCamp.com上做这个 挑战指出:

将存储在二维数组中的资源清册与第二个资源清册进行比较和更新 新交付的2D阵列。更新当前的现有库存 项目数量(以arr1为单位)。如果找不到项目,请添加新项目 将物料和数量输入到库存数组中。退回的存货 数组应按项目按字母顺序排列

当我尝试时:

updateInventory([[21, "Bowling Ball"], [2, "Dirty Sock"], 
[1, "Hair Pin"], [5, "Microphone"]], [[2, "Hair Pin"], 
[3, "Half-Eaten Apple"], [67, "Bowling Ball"], 
[7, "Toothpaste"]]).length // I get 8 instead of 6
updateInventory([[21, "Bowling Ball"], [2, "Dirty Sock"], 
[1, "Hair Pin"], [5, "Microphone"]], [[2, "Hair Pin"], 
[3, "Half-Eaten Apple"], [67, "Bowling Ball"], 
[7, "Toothpaste"]])
我得到:

当我应该得到:

[[88, "Bowling Ball"], [2, "Dirty Sock"], [3, "Hair Pin"], 
[3, "Half-Eaten Apple"], [5, "Microphone"], [7, "Toothpaste"]]
我相信这就是我的问题所在

for(var j = 0; j < arr2.length; j++){

         var i = arr2[j][1];

         for(var k = 0; k < arr1.length; k++){
             var idx = arr1.indexOf(i);
              if(idx === -1){
                 arr1.push(i);
              }
         }


    }
for(var j=0;j
因为它有点起作用了。但是有人能帮我按字母顺序排序吗?提前谢谢

试试这个

function updateInventory(arr1, arr2) {
  for (var x = 0; x < arr1.length; x++) {

    for (var y = 0; y < arr2.length; y++) {

      if (arr1[x][1] === arr2[y][1]) {
        arr1[x][0] = arr2[y][0] + arr1[x][0];
      }
    }
  }

  for (var j = 0; j < arr2.length; j++) {

    var i = arr2[j][1];
    var found = 0;

    for (var k = 0; k < arr1.length; k++) {
      if (arr1[k][1] === arr2[j][1]){
        found = 1;}
    }
    if (found == 0)
      arr1.push(arr2[j]);
  }
  arr1.sort(compareSecondColumn);
  return arr1;

}
函数更新Inventory(arr1、arr2){
对于(变量x=0;x
用于分类

function compareSecondColumn(a, b) {
    if (a[1] === b[1]) {
        return 0;
    }
    else {
        return (a[1] < b[1]) ? -1 : 1;
    }
}
函数比较第二列(a、b){
如果(a[1]==b[1]){
返回0;
}
否则{
返回(a[1]
试试这个

function updateInventory(arr1, arr2) {
  for (var x = 0; x < arr1.length; x++) {

    for (var y = 0; y < arr2.length; y++) {

      if (arr1[x][1] === arr2[y][1]) {
        arr1[x][0] = arr2[y][0] + arr1[x][0];
      }
    }
  }

  for (var j = 0; j < arr2.length; j++) {

    var i = arr2[j][1];
    var found = 0;

    for (var k = 0; k < arr1.length; k++) {
      if (arr1[k][1] === arr2[j][1]){
        found = 1;}
    }
    if (found == 0)
      arr1.push(arr2[j]);
  }
  arr1.sort(compareSecondColumn);
  return arr1;

}
函数更新Inventory(arr1、arr2){
对于(变量x=0;x
用于分类

function compareSecondColumn(a, b) {
    if (a[1] === b[1]) {
        return 0;
    }
    else {
        return (a[1] < b[1]) ? -1 : 1;
    }
}
函数比较第二列(a、b){
如果(a[1]==b[1]){
返回0;
}
否则{
返回(a[1]
您可以使用使事情更容易理解。在我的示例中,我确信您可以组合所有函数,而不是更改
oldValues
数组

var oldValues = [[21, "Bowling Ball"], [2, "Dirty Sock"], 
[1, "Hair Pin"], [5, "Microphone"]];

var newValues = [[2, "Hair Pin"], 
[3, "Half-Eaten Apple"], [67, "Bowling Ball"], 
[7, "Toothpaste"]];


newValues.forEach(function(nArr) {
  var i = 0;
  for(i; i < oldValues.length; i++) {
    if(oldValues[i][1] === nArr[1]) {
      oldValues[i] = nArr;
      return;
    }
  }
  oldValues.push(nArr);
});

oldValues.sort(function (ov, nv) {
  return ov[1] > nv[1];
}).forEach(function (v) {
  console.debug(v);
  $('#test').append('<li>[' + v[0] + ', ' + v[1] + ']</li>');
});
var oldValues=[[21,“保龄球”],[2,“脏袜子”],
[1,“发夹”],[5,“话筒”];
var newValues=[[2,“发夹”],
[3,“吃了一半的苹果”],[67,“保龄球”],
[7,“牙膏”];
forEach(函数(nArr){
var i=0;
对于(i;inv[1];
}).forEach(功能(v){
控制台调试(v);
$('#test')。追加('
  • ['+v[0]+','+v[1]+']
  • '); });

    您可以使用使事情更容易理解。在我的示例中,我确信您可以组合所有函数,而不是更改
    oldValues
    数组

    var oldValues = [[21, "Bowling Ball"], [2, "Dirty Sock"], 
    [1, "Hair Pin"], [5, "Microphone"]];
    
    var newValues = [[2, "Hair Pin"], 
    [3, "Half-Eaten Apple"], [67, "Bowling Ball"], 
    [7, "Toothpaste"]];
    
    
    newValues.forEach(function(nArr) {
      var i = 0;
      for(i; i < oldValues.length; i++) {
        if(oldValues[i][1] === nArr[1]) {
          oldValues[i] = nArr;
          return;
        }
      }
      oldValues.push(nArr);
    });
    
    oldValues.sort(function (ov, nv) {
      return ov[1] > nv[1];
    }).forEach(function (v) {
      console.debug(v);
      $('#test').append('<li>[' + v[0] + ', ' + v[1] + ']</li>');
    });
    
    var oldValues=[[21,“保龄球”],[2,“脏袜子”],
    [1,“发夹”],[5,“话筒”];
    var newValues=[[2,“发夹”],
    [3,“吃了一半的苹果”],[67,“保龄球”],
    [7,“牙膏”];
    forEach(函数(nArr){
    var i=0;
    对于(i;inv[1];
    }).forEach(功能(v){
    控制台调试(v);
    $('#test')。追加('
  • ['+v[0]+','+v[1]+']
  • '); });

    你也可以这样做,我知道问题已经解决了,但我只是想试一试

    Array.prototype.concatAll=function(){
    var结果=[];
    this.forEach(函数(子数组){
    子数组.forEach(函数(项){
    结果:推送(项目);
    });
    });
    返回结果;
    };
    函数updateInventory(arr1、arr2){
    arr1.forEach(功能(项目){
    对于(变量i=0;ib[1])?1:((b[1]>a[1])?-1:0);
    });
    警报(arr1);
    返回arr1;
    }
    //库存清单示例
    var curInv=[
    [21,“保龄球”],
    [2,“脏袜子”],
    [1,“发夹”],
    [5,“麦克风”]
    ];
    var newInv=[
    [2,“发夹”],
    [3,“吃了一半的苹果”],
    [67,“保龄球”],
    [7,“牙膏”]
    ];
    
    更新库存(curInv、newInv)你也可以这样做,我知道它已经被回答了,但我只是想试一试

    Array.prototype.concatAll=function(){
    var结果=[];
    this.forEach(函数(子数组){
    子数组.forEach(函数(项){
    结果:推送(项目);
    });
    });
    返回结果;
    };
    函数updateInventory(arr1、arr2){
    arr1.forEach(功能(项目){
    对于(变量i=0;ib[1])?1:((b[1]>a[1])?-1:0);
    });
    警报(arr1);
    返回arr1;
    }
    //库存清单示例
    库林瓦