我有一个复杂的(或者我认为很复杂的)功能,我正在试图用谷歌脚本创建键盘。
我正在管理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;
在这个循环中,我从我的库中调用另一个名为indexMatch的函数。
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;
其目的是遍历indexData并匹配源数据中的key参数,并在初始for循环期间将该数据输出到outputData表中。
但是,我为animalId获得的所有内容都是未定义的。
我想要过度思考这个问题。我不得不离开它,我当然意识到解决方案有多简单:
function search(array, key, compareKey, valueKey){
for (var i=0; i < array.length; i++) {
if (array[i][compareKey] === key) {
return array[i][valueKey];
}
}
}
&#13;
答案 0 :(得分:0)
我了解您要从outputData
和sourceData
提出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}]
关于您的脚本:
在您的脚本中,name
用作键。但sourceData
和indexData
没有密钥。因此id
和type
在outputData中成为null
。
index
中的 indexMatch()
是一维数组。因此index[j][0]
始终为undefined
。
未使用密钥count
。