2017-07-03 13 views
-1

私はJavaScriptが初めてで、同じ配列のオブジェクトを組み合わせるのに苦労しています。ここで は私が持っているものです。配列内のオブジェクトを操作する

var testList = [{ 
    'taskList1': 'task1 for taskList1', 
}, 
{ 
    'taskList1': 'task2 for taskList1', 
}, 
{ 
    'taskList2': 'task1 for taskList2' 
}, 
{ 
    'taskList2': 'task2 for taskList2' 
}] 

以下の配列は、私は本当に上から取得したいものです。

var testList = [{ 
    'taskList1': 'task1 for taskList1', 
    'taskList2': 'task1 for taskList2' 
}, 
{ 
    'taskList1': 'task2 for taskList1', 
    'taskList2': 'task2 for taskList2' 
}] 

誰もが上記のいずれかに私の現在の配列を変換するために私を助けていただけますか? ありがとうございます。

+0

これまでに何か試しましたか? – dloeda

+0

ここからそこに行きたいのであれば、おそらく間違っているでしょう。あなたの現在のデータモデルは裏返しているようです。あなたのデータをタスクごとにグループ化し、その中にタスクの配列を持たせるのがより普通です。 – Alnitak

+0

私はここからそこに到達しようとすることは簡単ではないことに注意してください。なぜなら各反復では、配列内のどのエントリを追加しなければならないのか分かりませんが、データ構造が逆転した完全に自明。 – Alnitak

答えて

1

あなたのデータ構造はこの場合非常に非効率的です。私はオブジェクトの同じ配列を持つことでより良いことをお勧めしますが、各オブジェクトはitemNamebelongsToを(あなたのケースでは - taskList)あなたがそこに渡すことができるコレクションへの参照として含める必要があります。私はまた、上記Codepenに使われている例として、以下のタスクの再構築配列を追加しましたhttps://codepen.io/Inlesco/pen/dReYgd

-

がここCodepenに、より柔軟なデータ構造を持つあなたの問題へのソリューションです。

var testList = [{ 
    item: 'task1', 
    belongsTo: 'taskList1' 
}, 
{ 
    item: 'task2', 
    belongsTo: 'taskList1' 
}, 
{ 
    item: 'task1', 
    belongsTo: 'taskList2' 
}, 
{ 
    item: 'task2', 
    belongsTo: 'taskList2' 
}] 

この問題には多くの方法があります。私はおそらく最も単純なものを追加しました。

+1

ありがとう!私はそれを試してあなたに知らせるでしょう。 – notentered

+0

回答にコードを記入してください - 第三者のサイトではない – Alnitak

1

1つのオブジェクト内の同じtaskList IDを持つオブジェクトを再編成するためにforステートメントを使用できます。 もちろん、それに適した条件を使用する必要があります。 しかし、@Denialosが言ったように、データ構造を変更するのが最善の方法です。

+1

アドバイスをいただきありがとうございます。私が持っているデータ構造が間違っているように見えます。 @Denialosが提案した方法に変更しようとします。 – notentered

1

上記の私のコメントでは、希望のデータ構造が逆さまになっているように見えます。アイテムのリストと各アイテムのタスクのセットが与えられれば、外側のエレメントがリストであり、内側のエレメントがタスクのセットであると考えられます。あなたの入力データモデルは、それぞれに、また多少不正な形式である、と述べた

{ 
    taskList1: [ 'task1 for taskList1', 'task2 for taskList1' ], 
    taskList2: [ 'task1 for taskList2', 'task2 for taskList2' ] 
} 

:結果の出力で

function restructure(taskList) { 
    var result = {}; 

    for (var i = 0, n = taskList.length; i < n; ++i) { 

     // read current item 
     var item = taskList[i]; 
     var key = Object.keys(item)[0]; 
     var value = item[key]; 

     // update the output 
     result[key] = result[key] || []; 
     result[key].push(value); 
    } 

    return result; 
} 

:私は使用することになり、あなたの(現在の)入力データを与えられた、ということを考えると

未知のキーを有する配列要素。あなたはそのデータを実際に作り出しているものを見て、可能であればそれを修正するべきです。

関連する問題