从数组动态分配对象 - 最佳实践 - nodejs javascript

时间:2016-08-11 18:53:19

标签: javascript arrays node.js object

从数组内容动态分配对象的最佳做法是什么。这就是我现在正在做的方式而且它有效,但看起来有点脏。是一个更好的方法来使类像对象?在那种情况下我该怎么做? 例如:

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 = "";
});

2 个答案:

答案 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: '' } }