複雜的 JavaScript 陣列分組


假設我們有一個如下所示的物件陣列 -

const arr = [
   {userId: "3t5bsFB4PJmA3oTnm", from: 1, to: 6},
   {userId: "3t5bsFB4PJmA3oTnm", from: 7, to: 15},
   {userId: "3t5bsFB4PJmA3oTnm", from: 172, to: 181},
   {userId: "3t5bsFB4PJmA3oTnm", from: 182, to: 190}
];

我們要求編寫一個 JavaScript 函式,該函式取入這樣的一個數組。該函式應根據 “from” 和 “to” 屬性將重疊的物件分組到一個物件中,如下所示 -

const output = [
   {userId: "3t5bsFB4PJmA3oTnm", from: 1, to: 15},
   {userId: "3t5bsFB4PJmA3oTnm", from: 172, to: 190}
];

示例

const arr = [
   {userId: "3t5bsFB4PJmA3oTnm", from: 1, to: 6},
   {userId: "3t5bsFB4PJmA3oTnm", from: 7, to: 15},
   {userId: "3t5bsFB4PJmA3oTnm", from: 172, to: 181},
   {userId: "3t5bsFB4PJmA3oTnm", from: 182, to: 190}
];
const groupByDuration = (arr = []) => {
   const result = arr.reduce((acc, val) => {
      let last = acc[acc.length - 1] || {};
      if (last.userId === val.userId && last.to + 1 === val.from) {
         last.to = val.to; } else {
            acc.push({ userId: val.userId, from: val.from, to: val.to });
      }
      return acc;
   }, []);
   return result;
}
console.log(groupByDuration(arr));

輸出

控制檯中的輸出為 -

[
   { userId: '3t5bsFB4PJmA3oTnm', from: 1, to: 15 },
   { userId: '3t5bsFB4PJmA3oTnm', from: 172, to: 190 }
]

更新於: 2020-11-21

148 次瀏覽

開啟你的 職業

透過完成課程來獲得認證

開始
廣告
© . All rights reserved.