从数组内容动态分配对象的最佳做法是什么。这就是我现在正在做的方式而且它有效,但看起来有点脏。是一个更好的方法来使类像对象?在那种情况下我该怎么做? 例如:
var names = ["test", "foo", "bar"];
var dict = {};
// init values
names.forEach(function(n){
dict[n] = {};
dict[n].property1 = false;
dict[n].property2 = true;
dict[n].property3 = "";
});
答案 0 :(得分:1)
我会创建工厂函数来从数组创建对象。在该函数内部,您可以使用例如Array.prototype.reduce()初始化对象:
var makeMyDict = function(arr) {
return arr.reduce(function(r, n) {
r[n] = {
property1: false,
property2: true,
property3: ""
};
return r;
}, {});
}
var names = ["test", "foo", "bar"];
var dict = makeMyDict(names);
答案 1 :(得分:1)
你的方法似乎很好。您始终可以使用reduce
来构建累积对象。
const props = {
property1: false,
property2: true,
property3: ``
};
const names = [`foo`, `bar`, `baz`];
const dict = names.reduce((a, x) => {
a[x] = {};
for (let p in props) a[x][p] = props[p];
return a;
}, {});
// Or using object spread (requires babel at the moment)
const dict = names.reduce((a, x) => (a[x] = {...props}, a), {});
console.log(dict);
{ foo: { property1: false, property2: true, property3: '' },
bar: { property1: false, property2: true, property3: '' },
baz: { property1: false, property2: true, property3: '' } }