Computer >> Máy Tính >  >> Lập trình >> Javascript

Nhóm các giá trị trong mảng theo hai thuộc tính JavaScript

Chúng ta có một mảng các đối tượng như thế này -

 const arr =[{value:12, gap:1}, {value:13, gap:1}, {value:14, gap:1}, {value:15, gap:1}, {value:19, gap:2}, {value:21, gap:1}, {value:22, gap:1}, {value:23, gap:1}, {value:27, gap:1}, {value:31, gap:4}, {value:35, gap:4}, {value:39, gap:4}, {value:43, gap:1}, {value:50, gap:1}, {value:51, gap:1}, {value:52, gap:1}, {value:55, gap:1}, {value:57, gap:1},]; 

Chúng tôi bắt buộc phải viết một hàm nhận trong mảng này và trả về một mảng mới trong đó tất cả các đối tượng liên tiếp có giá trị bằng tổng giá trị của đối tượng trước đó và khoảng trống phải được nhóm lại với nhau trong một mảng con.

Ví dụ:Đối tượng có giá trị 12 có khoảng trống 1 và đối tượng tiếp theo của nó có giá trị 13, vì vậy chúng phải được nhóm lại và với chúng đối tượng có giá trị 14 và 15, và như thế này.

Bây giờ, với sự cố đã hiểu, chúng ta hãy chuyển sang viết mã cho sự cố này. Chúng ta sẽ sử dụng phương thức Array.prototype.reduce () để tạo mảng mong muốn -

Ví dụ

 const arr =[{value:12, gap:1}, {value:13, gap:1}, {value:14, gap:1}, {value:15, gap:1}, {value:19, gap:2}, {value:21, gap:1}, {value:22, gap:1}, {value:23, gap:1}, {value:27, gap:1}, {value:31, gap:4}, {value:35, gap:4}, {value:39, gap:4}, {value:43, gap:1}, {value:50, gap:1}, {value:51, gap:1}, {value:52, gap:1}, {value:55, gap:1}, {value:57, gap:1},]; const groupArray =arr => {return arr.reduce ((acc, val, ind, array) => {// dữ liệu tích lũy và lastIndex của dữ liệu tích lũy const {data, currentIndex} =acc; // thuộc tính đối tượng hiện tại const {value, gap} =val; // the thuộc tính đối tượng trước đó const v =arr [ind-1] ?. value; const g =arr [ind-1]?. gap; if (ind ===0 || value! ==v + g) {// ghi chỉ mục của đối tượng cuối cùng và đẩy mảng con mới const index =data.push ([val]) - 1; return {dat a, currentIndex:index}; }; dữ liệu [currentIndex] .push (val); return {data, currentIndex}; }, {data:[], currentIndex:0}). data;} console.log (groupArray (arr)); 

Đầu ra

Đầu ra trong bảng điều khiển sẽ là -

 [[{value:12, gap:1}, {value:13, gap:1}, {value:14, gap:1}, {value:15, gap:1}], [{value:19, gap:2}, {value:21, gap:1}, {value:22, gap:1}, {value:23, gap:1}], [{value:27, gap:1}], [{value:31, gap:4}, {value:35, gap:4}, {value:39, gap:4}, {value:43, gap:1}], [{value:50, gap:1}, {value:51, gap:1}, {value:52, gap:1}], [{value:55, gap:1}], [{value:57, gap:1}]]