2017-05-09 13 views
0

Angular2/Typescript(ES6)で重複しないで2つの配列をマージする最も簡単で簡単な方法は何ですか?角度2で重複のないオブジェクト配列をマージする

p.s.配列にはネストされたオブジェクトが含まれます。

すでに多くの回答があります。だから私は混乱している。私はthisで答えを試しましたが、うまく動作しませんでした。

ありがとうございます。

答えて

4

これはangular2/typescriptとは関係ありません。私の答えはES6で動作します。 lodashから

使用uniq機能(https://lodash.com/docs/4.17.4#uniq)このようなあなたのソース配列から項目に関する:

const arrA = [1, 2, 3, 4]; 
const arrB = [3, 4, 5, 6]; 
const arr = _.uniq([...arrA, ...arrB]) 
// [1, 2, 3, 4, 5, 6] 

とネストされたオブジェクトについて、uniqByhttps://lodash.com/docs/4.17.4#uniqBy)またはuniqWithを使用しています。

const arrA = [{id: 1, n: 'e'}, {id: 2, n: 'z'}]; 
const arrB = [{id: 2, n: 'z'}, {id: 3, n: 'c'}]; 
const arr = _.uniqBy([...arrA, ...arrB], 'id') 
// [{id: 1, n: 'e'}, {id: 2, n: 'z'}, {id: 3, n: 'c'}] 

ただし、重複する場合は一意の識別子(idここ)が必要です。

[EDIT]場合、あなたはこのようにそれを行うことができ、一意の識別子を持っており、重複排除するために、全体のオブジェクトを使用したくない:

const arrA = [{a: 'a'}, {b: 'b'}]; 
const arrB = [{b: 'b'}, {c: 'c'}]; 
const arr = _.uniqBy([...arrA, ...arrB], JSON.stringify) 
// [{a: 'a'}, {b: 'b'}, {c: 'c'}] 

は、それがすべてのオブジェクトを文字列化します同じ文字列値であるかどうかを確認してください。巨大なオブジェクトや配列に対してはコストがかかるかもしれません。一意の識別子を持つ方が良い方法です。

+0

私は全体のオブジェクトを比較したいと思います。その場合、_uniq_は動作しますか? –

+0

あなたが必要なものを手に入れました。答えを更新します。 – bertrandg

+0

ここで問題は同じ_id_を持つことができますが、_n_は異なることです。その場合、それは重複しない、その別個のものである。 複数のコンパレータを持つことはできますか(たとえば_id_と_n_) –

関連する問題