对象属性可以通过点符号,或支架符号(如阵列)被分配
因此,尝试这个代替:
此[名称] =名;
您不会得到部门名称的“变量”,但部门数组将以部门为属性的对象。这是你想要的,如果部门名称永远是唯一的,你可能不需要该厕所的数组。
更新
要在我的观点扩大上述关于非需要额外的数组。因为你正在处理(我假设)独特的部门名称,这些可能是关键。
所以:
function buildDepartments() {
var departmentList = SpreadsheetApp.getActiveSpreadsheet().getRange('a1:c2').getValues(), // Assuming a 3 column list with, say: department name, department head, department deputy.
departments = {},
d;
for (d = 0; d < departmentList.length; d += 1) {
departments[departmentList[d][0]] = {head: departmentList[d][1], deputy: departmentList[d][2]};
}
// To recall the department details ... however many there are
Logger.log(departments['Math'].head); // Logs the head of the Math department
}
,但是,它可能会更有意义,不打领带自己陷入仿佛部门名称变化,它会是一个麻烦,使变化,可能随时间而改变的密钥。如果您“指定”了对象,那么使用ScriptDB也会更容易。 这样:
function buildDepartments() {
// Assuming a 3 column list with, say: name, head, deputy.
var departmentList = SpreadsheetApp.getActiveSpreadsheet().getRange('a1:c2').getValues(),
departments = [], // Now this an array
d;
for (d = 0; d < departmentList.length; d += 1) {
departments.push({
title: departmentList[d][0],
head: departmentList[d][1],
deputy: departmentList[d][2]
});
}
// To recall the department details ... however many there are
// Logs the head of the Math department by filtering the array to a single entry
Logger.log(departments.filter(function (d) { return d.title = 'Math'; })[0]);
}
在这一点上,并把事情一点就召回部门阵列可能是一个构造函数对象再次更加直观。因此:
function DepartmentList() {
var list = [];
this.addDepartment = function (dept) {
list.push({ title: dept[0], head: dept[1], deputy: dept[2] });
return this; // for chaining reasons, if you like.
}
this.getDepartment() = function(dept) {
var foundDepartment = list.filter(function (d) { return d.title = dept; });
return foundDepartment[0] || {}; // empty object if no department match
}
return list; // bare calls to the object returns the whole list
}
function buildDepartments() {
var departments = SpreadsheetApp.getActiveSpreadsheet().getRange('a1:c2').getValues(),
departmentList = new DepartmentList(), // Now this an object again
d;
departments.forEach(departmentList.addDepartment(entry)); // Possible because GAS supports ECMAScript5
// To recall the department details ... however many there are
// Logs the head of the Math department
Logger.log(departmentList.getDepartment('Math').head);
}
后者梅托德才会开始到意义,如果输入数据是更广泛的或通过对象的功能需要的任何处理。对于我所说的例子来说,这可能是过度的。
东西它是值得的,它有时是值得不使用“名称”作为atrribute因为它可以是一个保留字。并不总是一个问题,但可能会导致难以调试线路上的问题。 http://www.quackit.com/javascript/javascript_reserved_words.cfm – Jonathon 2013-02-18 16:18:11
谢谢你的提高,我改变了它。 – 2013-02-18 16:33:08