我有以下数组声明:
adminExam.detailTabInputData1 = [
{ id: 'examName', keys: 'Test Exam 1' },
{ id: 'published', keys: '2014-06-27' },
{ id: 'price', keys: '100' }
]
我想创建10到100个版本,稍作修改,如下所示:
// New data 2
adminExam.detailTabInputData2 = [
{ id: 'examName', keys: 'Test Exam 2' },
{ id: 'published', keys: '2014-06-29' },
{ id: 'price', keys: '200' },
]
是否可以使用函数或循环执行此操作?
答案 0 :(得分:1)
由于您在对象上构建,我们可以使用方括号表示法" []"在该对象上创建动态命名的属性。在这种情况下,方括号符号" []"和点符号"。"是可以互换的。
例如:adminExam['detailTabInputData1']
和adminExam.detailTabInputData1
拉出相同的对象属性。但由于方括号表示法使用字符串属性名称,因此我们可以将变量连接到其中以便动态地形成属性名称。
var adminExam = {}; // instantiate object
// source of data used to form dynamic object properties
var data = [[1, '2014-06-27', '100'], [2, '2014-06-29', '200'], [3, '2014-07-07', '300']];
// loop over data to build new, dynamic object properties
for ( var ii = 0, dataLen = data.length; ii < dataLen; ii++ ) {
// concatenate first element of current data row into property name
adminExam['detailTabInputData' + data[ii][0]] = [
{ id: 'examName', keys: 'Test Exam ' + data[ii][0] },
{ id: 'published', keys: data[ii][1] },
{ id: 'price', keys: data[ii][2] }
];
}
工作示例:http://jsfiddle.net/uf9Kd/(务必打开浏览器javascript控制台查看对象和属性。)
答案 1 :(得分:0)
你可以这样做。由于缺乏规格而有点尴尬,但我会尽力而为。
我通常会从建立只做一件事的小功能的角度来处理这个问题。你提到你想要数据略有变化,所以我先解决这个问题:
function rand(variance) {
return Math.floor(Math.rand() * variance);
}
var baseDate = new Date();
function variableDate(seed) {
var base = new Date(baseDate);
base.setDate(base.getDate() + seed + rand(5));
return base;
}
var basePrice = 100;
function price(seed) {
return basePrice + seed;
}
var baseExamId = 1;
function examName(seed) {
return 'Test Exam ' + (baseExamId + seed);
}
插入那些我们可以制作工厂方法的乐高积木:
function createItem(id, key) {
// It is unclear why this data structure and property names were choosen.
return { id: id, keys: key };
}
function createEntry(seed) {
// Again it is unclear why an array was choosen over an object in this case.
return [
createItem('examName', examName(seed)),
createItem('published', variableDate(seed)),
createItem('price', price(seed))
];
}
现在我们最后循环并将新值分配给一个continer对象。
function createAdminExam(size) {
var i, data = {};
for (i = 0; i < size; i++) {
data['detailTabInputData' + i] = createEntry(i);
}
return data;
}
var adminExam = createAdminExam(10);
有很多更有效的方法可以实现这种逻辑。大多数 混淆来自数据结构的选择。作为锻炼来 读者,试着想一想这可能有不同的方法 以及可以使用哪些替代数据结构来提高可读性 和/或表现。