2017-06-26 11 views
0

lodashを使用すると、1つの配列のidが文字列で、もう一方のIDがa数?各配列のidが異なる型(文字列、数値)の場合、2つの配列をマージする

var a = [{ 
    id: 1, 
    item: 1 
}, { 
    id: 2, 
    item: 2 
}, { 
    id: 3, 
    item: 4 
}]; 

var b = [{ 
    id: "1", 
    profile: 1 
}, { 
    id: "2", 
    profile: 2 
}]; 

これは私が試みたものです。両方の配列のIDが文字列である場合、または両方のIDが数値の場合、これはうまく動作します。 toString()またはparseIntを追加しても機能しないようです。

return _.map(a, function(obj) { 
    return _.assign(obj, _.find(b, { 
     id: obj.id 
    })); 
}); 

答えて

1

_.find()メソッドにカスタム関数を渡すのはどうですか?フィドルの作業

return _.map(a, function(obj) { 
    return _.assign(obj, _.find(b, function(o) { 
     return o.id == obj.id; 
    })); 
}); 
+0

すべてのことが数値結果の配列のIDを作成する方法はありますか?あなたが書いている様子、ids 1と2は文字列、id 3は数字です。 – JAck28

+0

@ JAck28 '_.assign()'の出力を変数に代入し、 'id'の値をstringまたはintに変換してから' _.map() 'に返します:https://jsfiddle.net/ugL7z0oy/。 –

+0

ありがとう、それは動作します。 – JAck28

0
const merged = _.reduce(a, (acc, obj) => { 
    const match = _.find(b, val => obj.id == val.id); 
    return match ? _.concat(acc, _.assign(obj, match)) : acc; 
}, []); 

https://jsfiddle.net/f6ss8vau/

0

をあなたはlodashの_.merge()を使用することができます。これは、再帰的配列をマージし、オブジェクト、およびプロパティをマージする緩んで等価(==)を実行:

var a = [{"id":1,"item":1},{"id":2,"item":2},{"id":3,"item":4}]; 
 

 
var b = [{"id":"1","profile":1},{"id":"2","profile":2}]; 
 

 
var result = _.merge([], a, b); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

+1

ああ、私はものを複雑にしていたようだ。 – JAck28

関連する問題