2016-09-03 6 views
1

私はcreated a fiddle hereの質問を以下の答えの助けを借りて持っています。新しい配列に別の値を取得するためのオブジェクトのフィルタ配列

私はオブジェクトの配列を持っています。アレイ内の個々のオブジェクトが含まれています

obj1, obj2, obj3... 

オブジェクトの1の例は次のとおりです。

{ 
client_id: "85" 
id: 1477 
organisation_id: 5 
task_project_id: 26 
project_name: "Reiciendis adipisci fugiat." 
project_description: "Soluta consequatur labore et dolores" 
task_description: "Qui sunt at aut." 
task_end_time: null 
task_start_time: "2016-05-21 09:00:00" 
transaction_id: null 
} 

私はtask_project_idの個別のエントリを含むこの最初の配列からオブジェクトの新しい配列を生成したいです。新しい配列は、以下のあたりに構造の異なるオブジェクトが含まれている必要があります

{ 
task_project_id: 26 
project_name: "Reiciendis adipisci fugiat." 
} 

私はjQuery.greparray.filterarray.mapを試みたが、無駄にしています。また、「別個のオブジェクトの配列を抽出」を検索として使用している例も見つからないようです。誰かが私に例を教えてもらえますか?ありがとう。

+1

私はそれを得ることはありません。最初のオブジェクトの例は、2番目の例とどのように関連していますか?そして、あなたは「ユニークな」オブジェクトをどのように定義しますか? – Utkanos

答えて

1

array.mapうまく動作するはずです:

var b = a.map(function(e) { 
    return { 
    task_project_id: e.task_project_id, 
    project_description: e.project_description 
    } 
}); 

編集:すでに遭遇した "見た" タスクプロジェクトIDのリストを格納することで、重複を除外する:

var seen = {}; // keys = list of unique task project ids 
var b = a.filter(function (e) { 
    return seen[e.task_project_id] ? false : (seen[e.task_project_id] = true); 
}); 

まとめて:

var newArray = (function (a) { 
    var seen = {}; 
    return a.filter(function (e) { 
    return seen[e.task_project_id] ? false : (seen[e.task_project_id] = true); 
    }).map(function (e) { 
    return { 
     task_project_id: e.task_project_id, 
     project_description: e.project_description 
    } 
    }); 
})(oldArray); 
+0

こんにちは@sebnukem返信いただきありがとうございます。私は重複した 'task_project_id'エントリを除外したいと思っています。 – TheRealPapa

2

これは何ですか?出力を確認してください。

var oldArray = [{ 
 
    client_id: "85", 
 
    id: 1477, 
 
    organisation_id: 5, 
 
    task_project_id: 26, 
 
    project_name: "Reiciendis adipisci fugiat.", 
 
    project_description: "Soluta consequatur labore et dolores", 
 
    task_description: "Qui sunt at aut.", 
 
    task_end_time: null, 
 
    task_start_time: "2016-05-21 09:00:00", 
 
    transaction_id: null 
 
    }, { 
 
    client_id: "86", 
 
    id: 1434, 
 
    organisation_id: 5, 
 
    task_project_id: 22, 
 
    project_name: "Reiciddgdgdfgci fugiat.", 
 
    project_description: "Soluta consequatur labore et dolores", 
 
    task_description: "Qui sunt at aut.", 
 
    task_end_time: null, 
 
    task_start_time: "2016-05-21 09:00:00", 
 
    transaction_id: null 
 
    }], 
 
    newArray; 
 
newArray = oldArray.map(function(obj) { 
 
    return { 
 
    task_project_id: obj.task_project_id, 
 
    project_description: obj.project_description 
 
    } 
 
}); 
 

 
console.log(newArray);

+0

こんにちは@Nikhilesh Shivarathriが閉じる!私は別のtask_project_idエントリのみを含むように新しい配列を探しています。私はこれで今でも仕事ができると思う。助けてくれてありがとう! – TheRealPapa

0

ES6:

let map = new Map(); 
a = [{a:1, b:"blue"},{a:1, b:"red"}] 
a.map(item=>map.set(item.a, item)); 
let result = [...map.values()]; 

結果:

[ { a: 1, b: 'red' } ] 
関連する問題