【问题标题】:Matching two array key and combine it's value with google app script匹配两个数组键并将其值与谷歌应用脚​​本结合起来
【发布时间】:2019-08-28 09:31:17
【问题描述】:

我有两个格式化数组,如下代码,我想匹配 id 并获取 size 和 stock 的匹配 id 值

我有来自 github 的代码如下,但无法让它工作

var arraysize = []; 
var arraycode = []; 
var code = '{id:'+stock[i][1] +',stock:'+ stock[i][4]+'}'; 
var size = '{id:'+tomatchcode+',size:'+tomatchsize+'}'; 
arraycode[i] = code;
arraysize[i] = size; 
Logger.log(arraysize); 
Logger.log(arraycode);

[19-08-29 10:32:35:003 ICT] [{id:59,size:36}, {id:123,size:37}, {id:62,size:38}, {id:63,size:39}, {id:64,size:40}]
[19-08-29 10:32:35:003 ICT] [{id:63,stock:17}, {id:123,stock:16}, {id:59,stock:10}, {id:64,stock:12}, {id:62,stock:14}]

//both array id value in random position but have same value

var matcharray =checkArrayForMatches(arraycode,arraysize)

function checkArrayForMatches(array,properties){
    var returnArray = [];
    if (Array.isArray(array[0])){
      for (var i = 0,x = array.length;i<x;i++){
        var row = array[i];
        var match = true;
        for (var j in properties){
          if (properties[j] !== row[j]){
            match = false;
          }
        }
        if (match) {returnArray.push(i)};
      }
    } else if (typeof array[0] == 'object'){
      for (var i = 0,x = array.length;i<x;i++){
        var obj = array[i];
        var match = true;
        for (var j in properties){
          if (obj[j] !== properties[j]){
            match = false;
          }
        }
        if (match) {returnArray.push(i)};
      }
    }
    return returnArray;
  }

上面的函数没有返回任何值。我希望它返回这样的数组,其中包含大小值,后跟股票值 [{36,10}, {37,16}, {38,13}, {39,17}, {40,12}] 如您所见,每个返回值都有一个匹配的 id。

非常感谢任何帮助。

【问题讨论】:

  • 您正在这里创建一个字符串:var code = '{id:'+stock[i][1] +',stock:'+ stock[i][4]+'}';。您应该创建一个对象:var code = {id: stock[i][1] ,stock:stock[i][4]};
  • 嗨@TheMaster,谢谢你的帮助,现在它工作得很好:)
  • 如果有帮助,请考虑接受答案。

标签: arrays google-apps-script


【解决方案1】:

流程:

  • 创建id:stock的哈希表
  • 使用Array.map 使用idarraysize 从哈希表中检索stock

片段:

var arraysize =  [{ id: 59, size: 36}, { id: 123, size: 37}, { id: 62, size: 38}, { id: 63, size: 39}, { id: 64, size: 40}];
var arraycode = [{ id: 63, stock: 17}, { id: 123, stock: 16}, { id: 59, stock: 10}, { id: 64, stock: 12}, { id: 62, stock: 13}];
var arrayCodeObj = {};
arraycode.forEach(function(obj){arrayCodeObj[obj.id]=obj.stock});//create hash table
var arr2d = arraysize.map(function(obj){ return [obj.size, arrayCodeObj[obj.id]]})
console.log(arr2d)
console.log(arrayCodeObj)

【讨论】:

  • 嗨@TheMaster,我测试了您的代码并且工作正常,但是当我附加到我的代码时它返回null,我编辑了我的代码以显示我如何获得var arraysize 和var arraycode。记录器日志返回的代码与您的代码中的 var arraysize 和 var arraycode 完全相同,但奇怪的是,它使用您的代码为 Logger.log(arr2d) Logger.log(arrayCodeObj)*/ '[19-08-29 10: 32:35:004 ICT] [[null, null], [null, null], [null, null], [null, null], [null, null]]''[19-08-29 10:32: 35:004 ICT] {undefined=null}'
猜你喜欢
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多