循环遍历一个对象,并匹配另一个对象中的值

时间:2017-04-03 23:59:44

标签: google-apps-script

我有一个复杂的(或者我认为很复杂的)功能,我正在试图用谷歌脚本创建键盘。

我正在管理3个不同的对象。 1)sourceData 2)indexData 3)outputData

sourceData[29] | Array | [{type:"cat", count:"3"}, {type:"dog", count:"5"}...]

indexData[29] | Array | [{type:"cat", id:"301"}, {type:"dog", id:"302"}...]

outputData[29] | Array | [{type:"cat", id:"301", count:"3"}, {type:"dog", id:"302", count:"5"}...]

我目前正在使用for循环遍历源数据,以在outputData对象中创建数据。



for (var i = 0; i < sourceData.length; i++) {
    var animals = {}; 
    outputData.push(animals);
    animal.type = sourceData[i].type;
    animal.id = lib.indexMatch(indexData, sourceData[i].type);
    animal.count = sourceData[i].count;
}
&#13;
&#13;
&#13;

在这个循环中,我从我的库中调用另一个名为indexMatch的函数。

&#13;
&#13;
function indexMatch(data, lookup) {
  var index = data; // object that contains the data to iterate through.
  for (var j = 0; j < index.length; j++){ // iterate through all rows in data
    if(index[j][0]=lookup){
      var value = index[j][1];
    }
  }
  Logger.log(j);
  return value;
}
&#13;
&#13;
&#13;

其目的是遍历indexData并匹配源数据中的key参数,并在初始for循环期间将该数据输出到outputData表中。

但是,我为animalId获得的所有内容都是未定义的。

我想要过度思考这个问题。我不得不离开它,我当然意识到解决方案有多简单:

&#13;
&#13;
function search(array, key, compareKey, valueKey){
    
    for (var i=0; i < array.length; i++) {
        if (array[i][compareKey] === key) {
            return array[i][valueKey];
        }
    }
 }
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

我了解您要从outputDatasourceData提出indexData。如果我误解了你的问题,我很抱歉。

以下样本怎么样?

示例:

function myFunction() {
  var sourceData = [{type:"cat", count:"3"}, {type:"dog", count:"5"}];
  var indexData = [{type:"cat", id:"301"}, {type:"dog", id:"302"}];
  var outputData = [];

  sourceData.forEach(function(e){
    indexData.forEach(function(f){
      if (e.type == f.type) {
        var dic = {
          type: f.type,
          id: f.id,
          count: e.count
        };
        outputData.push(dic);      
      }
    });
  });
}

结果:

>>> [{count=3, id=301, type=cat}, {count=5, id=302, type=dog}]

关于您的脚本:

  1. 在您的脚本中,name用作键。但sourceDataindexData没有密钥。因此idtype在outputData中成为null

  2. index中的
  3. indexMatch()是一维数组。因此index[j][0]始终为undefined

  4. 未使用密钥count