我有一系列对象需要转换为二维数组,因此我可以写入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.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],[..., ..., ...]]
,而是将属性添加到每个数组元素。
答案 0 :(得分:1)
在你的功能的第一部分,
function objectsToArray(objects) {
var outPutArray = createArray(objects.length, objects[0].length);
看起来您假设objects
已经是2D数组。我将假设objects
是这样的一维对象数组。 [{prop:value...},{...},{...}]
。
现在你要做的是从这些数据中生成2个数字索引。您需要确保2D数组的“第1列”对于所有对象都是相同的属性。
所以你的第一个for循环应该是属性。另外,请保留一个索引,以便了解您所使用的号码属性。
var j = 0;
for (var prop in objects[0]) {
然后你应该对所有对象进行循环。因此,我们的想法是首先选择“名称”,然后浏览所有对象,将“名称”字段添加到每个对象的2D数组中。
for (var i in objects) {
outPutArray[i][j] = objects[i][prop];
}
j++;
}
我认为您看到的主要问题是因为您没有使用数字索引。 (var j in objects[i]
:这将j
定义为属性,例如“name”,而非数字索引,就像您期望的那样。)
答案 1 :(得分:0)
这是一种方式......
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;
}