在构建工作表名称列表时,我遇到了这个问题: List names of sheets in Google Sheets and skip the first two
为您节省点击次数,此人的解决方案是:(向下剥离,伪代码)
getSheets() // Get all the sheets in spreadsheet workbook
var out = new Array( sheets.length+1 ) ;
for (var i = 1 ; i < sheets.length+1 ; i++ )
out[i] = [sheets[i-1].getName()];
return out
我的解决方案将利用:
...
var sheetName = sheet[i].getName();
out.push(sheetName);
第一个解决方案似乎是动态创建空数组值,然后再声明它们的值。虽然我一直只是将新值推入数组。
有什么区别?
在哪种情况下比另一种更好?
在哪种情况下应避免?
答案 0 :(得分:0)
您的代码和原始代码做的事情完全不同。
假设sheets
中包含从"sheet1"
返回名称"sheet2"
,"sheet3"
和getName
的对象,原始代码将创建一个看起来像像这样:
[
(missing),
["sheet1"],
["sheet2"],
["sheet3"]
]
请注意两件事:
undefined
略有不同。)您的代码改为创建此代码:
[
"sheet1",
"sheet2",
"sheet3"
]
想必作者有一个跳过索引0并创建从属数组的原因(我想是因为他们将结果数组传递给某些期望采用这种形式的API函数)。
因此,这里并没有真正的“更好”或“更差”,只是有所不同。
如果您的基本问题是:
var original = ["one", "two", "three"];
var updated = [];
for (var i = 0; i < original.length; ++i) {
updated[i] = original[i].toUpperCase(); // Or whatever
}
比这更好/更糟糕:
var original = ["one", "two", "three"];
var updated = [];
for (var i = 0; i < original.length; ++i) {
updated.push(original[i].toUpperCase()); // Or whatever
}
答案是:这实际上是风格问题。两者之间的性能没有明显差异(并且很少有关系),有趣的是,一种方法在某些JavaScript引擎上更快,而另一种在其他JavaScript引擎上更快。
使用map
可以更好地表达这两种情况:
var original = ["one", "two", "three"];
var updated = original.map(function(entry) { return entry.toUpperCase(); });
我认为Google表格具有map
,尽管它大多数情况下仅具有ES3级功能。
旁注:new Array
几乎永远不是创建数组的正确方法。