2017-11-05 17 views
0

JSONオブジェクトの配列の新しいデフォルト値のソースとしてJSONオブジェクトを使用しようとしています。JSONオブジェクトのデータをJSONオブジェクトの配列にプッシュ

var records= 
    [{"Key1":"ValueA","Key2":"ValueA","Key3":"ValueA"}, 
    {"Key1":"ValueB","Key2":"ValueB","Key3":"ValueB"}] 

var defaultRecord = 
    {"Key1":"DefaultValue1","Key2":"DefaultValue2","Key3":"DefaultValue3"} 

pushNewDefaultRecord() 
pushNewDefaultRecord() 
changeFirstDefaultRecord("NEW VALUE") 
showRecord() 

function pushNewDefaultRecord(){ 
    records.push(defaultRecord) 
} 

function changeFirstDefaultRecord(newValue){ 
    records[2].Key1 = newValue 
    records[2].Key2 = newValue 
    records[2].Key3 = newValue 
} 

function showRecord(){ 
    console.log(JSON.stringify(records)) 
} 

これは、次の配列を生成します:私の最初の試みで、私はこれをしなかった

[{"Key1":"ValueA","Key2":"ValueA","Key3":"ValueA"}, 
{"Key1":"ValueB","Key2":"ValueB","Key3":"ValueB"}, 
{"Key1":"NEW VALUE","Key2":"NEW VALUE","Key3":"NEW VALUE"}, 
{"Key1":"NEW VALUE","Key2":"NEW VALUE","Key3":"NEW VALUE"}] 

私は、レコードの配列にプッシュされていたものdefaultRecordオブジェクトが、オブジェクト内のデータではないことに気づきました1つのレコードを更新すると、両方の新しいレコードがその変更を反映するようになりました。

JSON.stringifyを使用してJSON.parseを使用するようにpushNewDefaultRecord関数を変更すると動作しますが、非常に扱いにくいようです。これにアプローチするクリーナーの方法はありますか?

function pushNewDefaultRecord(){ 
    var newDefaultRecord = JSON.parse(JSON.stringify(defaultRecord)) 
    records.push(newDefaultRecord) 
} 

が生成されます二つの機能で

[{"Key1":"ValueA","Key2":"ValueA","Key3":"ValueA"}, 
{"Key1":"ValueB","Key2":"ValueB","Key3":"ValueB"}, 
{"Key1":"NEW VALUE","Key2":"NEW VALUE","Key3":"NEW VALUE"}, 
{"Key1":"DefaultValue1","Key2":"DefaultValue2","Key3":"DefaultValue3"}] 
+0

だから、このすべてのあなたの質問は何ですか? – YouneL

+0

あなたが必要とするたびに新しいデフォルトオブジェクトを返す関数を使うことができます – charlietfl

+0

私はあなたがすでにそれをしていると思います、2番目の 'pushNewDefaultRecord'はあなたがそれを呼び出すたびに新しいデフォルトオブジェクトを作成します。 – YouneL

答えて

0

。 1つは新しいレコードを作成し、もう1つは値を変更します。以下のような何か:

var records = [{ 
 
    "Key1": "ValueA", 
 
    "Key2": "ValueA", 
 
    "Key3": "ValueA" 
 
    }, 
 
    { 
 
    "Key1": "ValueB", 
 
    "Key2": "ValueB", 
 
    "Key3": "ValueB" 
 
    } 
 
] 
 

 
var keys = ["Key1", "Key2", "Key3"]; 
 

 
function createRecord(keys, values) { 
 
    return keys.reduce((obj, curr, i) => { 
 
    obj[curr] = values[i]; 
 
    return obj; 
 
    }, {}) 
 
} 
 

 
function changeRecord(arr, i, keys, values) { 
 
    keys.forEach((key, j) => { 
 
    arr[i][key] = values[j]; 
 
    }); 
 
} 
 

 
function pushRecord(arr, record) { 
 
    arr.push(record); 
 
} 
 

 
pushRecord(records, createRecord(keys, ["ValueC", "ValueC", "ValueC"])); 
 
pushRecord(records, createRecord(keys, ["ValueD", "ValueD", "ValueD"])); 
 

 
console.log(records); 
 

 
changeRecord(records, 2, keys, ["new value", "new value", "new value"]); 
 

 
console.log(records);

関連する問題