簡體   English   中英

在唯一ID上合並兩個數組

[英]Merging two Arrays on Unique ID

我不希望解決此問題,因此正在尋求有關如何改進此方法的建議。

我和Json有兩個對象數組。

第一個具有日期范圍內的所有日期,第二個列表來自SQL查詢,其中可能缺少幾個月。

所需的結果必須是一個包含所有月份的清單,並帶有事宜計數,但是當我將它們加載到下面的函數中時,我缺少了清單上不存在的月份的問題計數。

我認為我只是在函數中丟失了一些代碼,但是我不確定是什么,因此來了。

我確實在JSFiddle中進行了工作,但是我希望使用更清晰的代碼。

let x = [{labelDate: "Jun 2013"},
{labelDate: "Jul 2013"},
{labelDate: "Aug 2013"},
{labelDate: "Sep 2013"},
{labelDate: "Oct 2013"},
{labelDate: "Nov 2013"},
{labelDate: "Dec 2013"},
{labelDate: "Jan 2014"},
{labelDate: "Feb 2014"},
{labelDate: "Mar 2014"},
{labelDate: "Apr 2014"},
{labelDate: "May 2014"}];


let y = [{labelDate: "Jun 2013", matterCount: "1"},
{labelDate: "Jul 2013", matterCount: "2"},
{labelDate: "Aug 2013", matterCount: "2"},
{labelDate: "Sep 2013", matterCount: "10"},
{labelDate: "Oct 2013", matterCount: "1"},
{labelDate: "Nov 2013", matterCount: "1"},
{labelDate: "Feb 2014", matterCount: "1"},
{labelDate: "Apr 2014", matterCount: "17"},
{labelDate: "May 2014", matterCount: "21"}];

const merge = (x, y) =>
            x.map(xItem => ({
              ...y.find(yItem => yItem.labelDate === xItem.labelDate && Item),
              ...xItem
            }));

Actual outcome 
merge = [{labelDate: "Jun 2013", matterCount: "1"},
{labelDate: "Jul 2013", matterCount: "2"},
{labelDate: "Aug 2013", matterCount: "2"},
{labelDate: "Sep 2013", matterCount: "10"},
{labelDate: "Oct 2013", matterCount: "1"},
{labelDate: "Nov 2013", matterCount: "1"},
{labelDate: "Dec 2013"},
{labelDate: "Jan 2014"},
{labelDate: "Feb 2014", matterCount: "1"},
{labelDate: "Mar 2014"},
{labelDate: "Apr 2014", matterCount: "17"},
{labelDate: "May 2014", matterCount: "21"}];

desired outcome 
merge  = [{labelDate: "Jun 2013", matterCount: "1"},
{labelDate: "Jul 2013", matterCount: "2"},
{labelDate: "Aug 2013", matterCount: "2"},
{labelDate: "Sep 2013", matterCount: "10"},
{labelDate: "Oct 2013", matterCount: "1"},
{labelDate: "Nov 2013", matterCount: "1"},
{labelDate: "Dec 2013", matterCount: "0"},
{labelDate: "Jan 2014", matterCount: "0"},
{labelDate: "Feb 2014", matterCount: "1"},
{labelDate: "Mar 2014", matterCount: "0"},
{labelDate: "Apr 2014", matterCount: "17"},
{labelDate: "May 2014", matterCount: "21"}];

https://jsfiddle.net/cp39aoyf/2/

怎么樣|| 的默認值:

const merge = (x, y) =>
        x.map(xItem => ({
          ...y.find(yItem => yItem.labelDate === xItem.labelDate && yItem) || {...xItem, matterCount: "0"}
        }));

演示JSFiddle。

另一種方法是簡單地添加yItem覆蓋的默認值(如果存在):

const merge = (x, y) =>
    x.map(xItem => ({
      ...xItem,
      ...{matterCount: "0"},
      ...y.find(yItem => yItem.labelDate === xItem.labelDate && yItem)
    }));

小提琴為此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM