私は以下の2つのオブジェクト配列を持っています。私はtransidが一致するarray2要素を反映するためにarray1要素を更新したいと思います。だから私の結果は、配列2の値を反映するように更新されたarray1の2つの要素、または更新された値を持つ同じ配列1を持つ新しい配列のいずれかでなければなりません。Javascriptは、一致するインデックスの別の配列に基づいて配列を更新します。
もっと現代的な構文でこれを行うにはどうすればよいでしょうか?私はいくつかのオプションを開いて比較することができます。たとえば、array1の一致するオブジェクトはarray2オブジェクトに置き換えることができます。または、array1オブジェクト内の個々の要素は、要素に対して何らかの反復処理によって更新できます。
var arra1 = [{
"_id" : ObjectId("583f6e6d14c8042dd7c979e6"),
"transid" : 1,
"acct" : "acct1",
"transdate" : ISODate("2012-01-31T05:00:00.000Z"),
"category" : "category1",
"amount" : 103
}, {
"_id" : ObjectId("583f6e6d14c8042dd7c2132t6"),
"transid" : 2,
"acct" : "acct2",
"transdate" : ISODate("2012-01-31T05:00:00.000Z"),
"category" : "category2",
"amount" : 103
}]
var arra2 = [{
"_id" : ObjectId("583f6e6d14c8042dd7c979e6"),
"transid" : 1,
"acct" : "acct2",
"transdate" : ISODate("2012-01-31T05:00:00.000Z"),
"category" : "category5",
"amount" : 107
}, {
"_id" : ObjectId("583f6e6d14c8042dd7c2132t6"),
"transid" : 2,
"acct" : "acct2",
"transdate" : ISODate("2012-01-31T05:00:00.000Z"),
"category" : "category2",
"amount" : 103
}, {
"_id" : ObjectId("583f6e6d14c8042dd7c2132t6"),
"transid" : 3,
"acct" : "acct2",
"transdate" : ISODate("2016-07-31T05:00:00.000Z"),
"category" : "category3",
"amount" : 103
}]
私はそれを少し演奏し、このようなものを今まで持っています。それは機能しませんが、それは私が探しているロジックのタイプです。
arr1.forEach(item =>
if (arr2.indexOf(item.transid) != -1){
item.category = arr2.indexOf(item.transid).category
}
)
現代一致する項目を検索する方法
find
を使用する必要がありますか?意味は、すべてのブラウザで作業することを心配していない? – MattはいES6。私は地元の開発と学習目的のためにそれを使用するので、大丈夫です。しかし、互換性を高めるために共有できる非ES6ソリューションは何でも自由に使えます。 –
いずれかの配列にトランジションが重複する可能性はありますか?配列ごとに0または1の意味があります。配列2が3つのtransid 1を持つ場合、これによりいくつかのオプションが削除されます。 – Matt