Google apps script 在二维数组中存储对象特性
我有一个需要转换为2d数组的对象数组,这样我就可以写入Google电子表格,其中每个属性都写入一个单元格。我有以下功能:Google apps script 在二维数组中存储对象特性,google-apps-script,Google Apps Script,我有一个需要转换为2d数组的对象数组,这样我就可以写入Google电子表格,其中每个属性都写入一个单元格。我有以下功能: function objectsToArray(objects) { var outPutArray = createArray(objects.length, objects[0].length); for (var i in objects) { for (var j in objects[i]) { if (objects.hasOwnPro
function objectsToArray(objects) {
var outPutArray = createArray(objects.length, objects[0].length);
for (var i in objects) {
for (var j in objects[i]) {
if (objects.hasOwnProperty(i)) {
outPutArray[i][j] = objects[i][j];
}
}
}
return outPutArray;
}
示例对象:
object {
name: John
phone: 555-5555
email: john@john.com
}
问题在于,不是将属性值放入数组元素(outputArray应该看起来像[[John,555-5555,john@john.com],[…,…,…]
它将属性添加到每个数组元素。这里有一种方法
function myFunction() {
var objects = {};
objects[0] = {"name": "John", "phone": "555-5555", "email": "john@john.com"};
objects[1] = {"name": "Mary", "phone": "444-4444", "email": "mary@mary.com"};
var outputArrary = objectsToArray(objects);
Logger.log(outputArrary);
}
function objectsToArray(objects) {
var outputArray = [];
for (var i in objects)
outputArray.push([objects[i].name, objects[i].phone, objects[i].email]);
return outputArray;
}
在函数的第一部分
function objectsToArray(objects) {
var outPutArray = createArray(objects.length, objects[0].length);
看起来您正在假设对象
已经是一个2D数组。我将假设对象
是这样一个1D数组。[{prop:value…},{…},{…},{…}]
现在,您要做的是从该数据生成两个数字索引。您需要确保2D数组的“列1”对于所有对象都是相同的属性
所以你的第一个for循环应该在属性上。另外,保持一个索引,这样你就知道你在哪个数字属性上了
var j = 0;
for (var prop in objects[0]) {
然后你应该在所有的对象上做一个循环,首先你要选择“name”,然后遍历所有的对象,为每个对象的2D数组添加“name”字段
for (var i in objects) {
outPutArray[i][j] = objects[i][prop];
}
j++;
}
我认为您看到的主要问题是因为您没有使用数字索引。(
var j in objects[I]
:这将j
定义为属性,例如“name”,而不是您期望的数字索引).这正是我的问题,我没有考虑使用单独的计数器和反转for循环。非常好地工作,谢谢。请注意,这假设对象[1]与对象[0]具有相同的属性。如果每个对象都不同,那么我们会遇到更多麻烦。;-)这是我最初处理它的方式,但是如果属性发生了变化,代码就必须被修复,因为我可能不会永远维护这个项目,所以我需要一些更具动态性的东西。