2016-03-25 12 views
0

私は以下のような1つの設定データ構造を持っています。どのように複数のデータに1つの設定オブジェクトを共有することができます

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

上記の1つを以下のようなマルチデータオブジェクトに共有したいと考えています。

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

私がはっきりと表現できないことを恐れて、例えば、私はこのような最終結果を得たいと思います。

私は下の方法 composeを書くが、最終的に、私は私が Object.freeze()を使用している場合でも configが変更されることがわかり、私は configを保護する見当がつかない

、各データにassign()シェア1つの設定を使用してみてください

{ 
    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'} ], 
    }, 
} 

変数、あなたは私に何か提案を与えるだろうか?

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

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

    return mix; 
}; 

についてです。あなたが深いクローンconfigに持って

答えて

1

は、あなたが例えば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 })); 
+0

おかげで多くのことを、あなたは私を助け:) –

関連する問題