2016-12-17 7 views
0

を破壊するので、ここで私の状況は私がJavaScriptのオブジェクトからデータを取得したいということです。配列にデータをプッシュすると、以前のデータ

{ 
    "task": { 
    "task-1": { 
     "job": "Engineer" 
    }, 
    "task-2": { 
     "job": "Developer" 
    } 
    } 
} 

{ 
    { 
    "id": 1, 
    "job": "Engineer" 
    }, 
    { 
    "id": 2, 
    "job": "Developer" 
    }, 
} 

にそれを変換し、私は成功しましたそれを変換する際に.push()を実行すると、Engineerジョブではなく、Developerジョブのみがプッシュされます。たとえば、

{ 
    { 
    "id": 2, 
    "job": "Developer" 
    }, 
    { 
    "id": 2, 
    "job": "Developer" 
    } 
} 

ここに私が使用しているコードがあります。

var jobs = { "task": { "task-1": { "job": "Engineer" }, "task-2": { "job": "Developer" } } }; 
var jobSchema = { 'id': '', 'job': '' }; 
var currentJobs = []; 

var i = 0; 
var curJobs = jobs.task; 
for (var task in curJobs) { 
    if (curJobs.hasOwnProperty(task)) { 
    i++; 
    jobSchema.id = i; 
    jobSchema.job = curJobs[task].job; 
    currentJobs.push(jobSchema); 
    } 
} 
+0

同じインスタンスを繰り返し変更し、配列にプッシュします。何も「破壊」されているわけではありません。新しいインスタンスをプッシュすることは決してありません。 – pvg

+0

ああ、どのようにして同じインスタンスを変更しないのですか? – mikeywikey

+1

新しいインスタンスを作成し、それを変更しますか?あなたはちょうど私の後にjobSchema = {}をつけることができます – pvg

答えて

1

このライン

var jobSchema = { 'id': '', 'job': '' }; 

あなたは、ループに変更し、配列にプッシュするオブジェクトの新しいインスタンスを作成します。問題はそれが毎回同じインスタンスであることです。結局、同じインスタンスへの参照の配列になります。このコードは簡素化され、さらにクリーンアップすることもできるが、低侵襲性のソリューションは、ちょうどあなたのループの本体の開始時に

jobSchema = {}; 

を追加することです。

+0

ありがとう、それは動作します。私はできる限り受け入れるだろう。 :) – mikeywikey

関連する問題