我有一个配置数据结构,如下所示。
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
问候。
答案 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 }));