有没有办法为数组中的对象文字指定通用元素?
例如:
var array = [ {key: "hi", label: "Hi", formatter:deleteCheckboxFormatter},
{key: "hello", label: "Hello", formatter:deleteCheckboxFormatter},
{key: "wut", label: "What?", formatter:deleteCheckboxFormatter}];
这三条记录都使用相同的格式化程序。你将如何重构它?
发布于 2009-10-18 23:32:22
我脑海中浮现出两种选择:
公共字段使用默认值的辅助函数:
function make(key, label) {
return {'key': key, 'label': label, formatter:deleteCheckboxFormatter};
}
var array = [ make("hi", "Hi"),
make("hello", "Hello"),
make("wut", "What?")];
或者是一个更通用的函数,它接受格式化程序属性的参数:
function make (formatter) {
return function (key, label) {
return {'key': key, 'label': label, 'formatter':formatter};
}
}
// a function to build objects that will have a 'fooFormatter'
var foo = make('fooFormatter');
var array = [ foo ("hi", "Hi"),
foo ("hello", "Hello"),
foo ("wut", "What?")];
我想到的最后一件事就是简单地迭代数组,分配公共字段:
var array = [ {key: "hi", label: "Hi"},
{key: "hello", label: "Hello"},
{key: "wut", label: "What?"}];
var i = array.length;
while (i--) {
array[i].formatter = 'deleteCheckboxFormatter';
}
我在这里以相反的顺序使用了while循环,因为迭代的顺序并不重要,并且这种类型的循环performs better。
发布于 2009-10-18 23:21:54
var array = [ {key: "hi", label: "Hi"},
{key: "hello", label: "Hello"},
{key: "wut", label: "What?"}];
for(var item in array)
item["formatter"] = deleteCheckboxFormatter;
发布于 2009-10-18 23:40:01
您可以使用构造函数将其创建为对象:
function Obj(key, label){
this.key = key;
this.label = label;
this.formatter = "deleteCheckboxFormatter";
}
var array = [ new Obj("hi", "Hi"),
new Obj("hello", "Hello"),
new Obj("wut", "What?") ];
https://stackoverflow.com/questions/1587328
复制相似问题