我怎么能将一个配置对象共享到多个数据

时间:2016-03-25 07:34:33

标签: javascript node.js

我有一个配置数据结构,如下所示。

iptables -A PREROUTING  -t mangle -p tcp --dport 22 -j LOG --log-level 4 --log-prefix "fwmark 1: "

我想分享上面一个到多个数据对象,如下所示。

const config = {
  foo: 'bar',
  king: [ { val: [], name: 'saber'}, { val: [], name: 'archer'} ],
};

我担心我无法清楚表达,例如,我想得到这样的最终结果。

var data = {
  group1: [ [1, 2, 3], ['a', 'b', 'c'] ],
  group2: [ [4, 5, 6], ['d', 'e', 'f'] ],
};

我尝试使用{ group1: { foo: 'bar', king: [ {val: [1,2,3], name:'saber'}, {val: ['a','b','c'], name:'archer'} ], }, group2: { foo: 'bar', king: [ {val: [4,5,6], name:'saber'}, {val: ['d','e','f'], name:'archer'} ], }, } 为每个数据共享一个配置

我在下面编写方法assign(),但最终我注意到compose即使我使用config也会被更改,我不知道保护Object.freeze()变量,你给我任何建议吗?

config

问候。

1 个答案:

答案 0 :(得分:1)

您必须深度克隆config,例如可以使用lodash

'use strict'
var _ = require('lodash');

const config = {
    foo: 'bar',
    king: [{ val: [], name: 'saber' }, { val: [], name: 'archer' }],
};

var compose = function(data) {
    let mix = {};

    Object.keys(data).map(function(key) {
        mix[key] = _.cloneDeep(config);
        mix[key].king.map(function(val, index) {
            mix[key].king[index].val = data[key][index];  // config will be changed here :(
        });
    });

    return mix;
};

var data = {
    group1: [[1, 2, 3], ['a', 'b', 'c']],
    group2: [[4, 5, 6], ['d', 'e', 'f']],
};

var out = compose(data);
console.log(require('util').inspect(out, { depth: null }));