簡體   English   中英

計算孩子總數和對象總數並分成不同的數組

[英]count total number of children and the total number of objects and split into different array

在這里,我正在使用 reduce 數組方法計算數組的總長度。

如果長度超過 30,我想將數組拆分為兩個 arrays,因此新數組的總數將如此處的代碼段 53 所示:兩個新的 [array1] = 長度將為 30 + [array2] = 長度為 23

任何建議都會很棒:

 let array = [ { "account": "0", "total": 1, "children": [ { "account": "A", "total": 1, "children": [], } ], }, { "account": "1", "total": 3, "children": [ { "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], } ], }, { "account": "2", "total": 3, "children": [ { "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], } ], }, { "account": "3", "total": 12, "children": [ { "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], }, { "account": "D", "total": 1, "children": [], }, { "account": "E", "total": 1, "children": [], }, { "account": "F", "total": 1, "children": [], }, { "account": "G", "total": 1, "children": [], }, { "account": "H", "total": 1, "children": [], }, { "account": "I", "total": 1, "children": [], }, { "account": "J", "total": 1, "children": [], }, { "account": "K", "total": 1, "children": [], }, { "account": "L", "total": 1, "children": [], }, ], }, { "account": "4", "total": 16, "children": [ { "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], }, { "account": "D", "total": 1, "children": [], }, { "account": "E", "total": 1, "children": [], }, { "account": "F", "total": 1, "children": [], }, { "account": "G", "total": 1, "children": [], }, { "account": "H", "total": 1, "children": [], }, { "account": "I", "total": 1, "children": [], }, { "account": "J", "total": 1, "children": [], }, { "account": "K", "total": 1, "children": [], }, { "account": "L", "total": 1, "children": [], }, { "account": "M", "total": 1, "children": [], }, { "account": "N", "total": 1, "children": [], }, { "account": "0", "total": 1, "children": [], }, { "account": "P", "total": 1, "children": [], }, ], }, { "account": "5", "total": 12, "children": [ { "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], }, { "account": "D", "total": 1, "children": [], }, { "account": "E", "total": 1, "children": [], }, { "account": "F", "total": 1, "children": [], }, { "account": "G", "total": 1, "children": [], }, { "account": "H", "total": 1, "children": [], }, { "account": "I", "total": 1, "children": [], }, { "account": "J", "total": 1, "children": [], }, { "account": "K", "total": 1, "children": [], }, { "account": "L", "total": 1, "children": [], }, ], }, ] const lengthOfChildren = array.reduce( (acc, val) => acc + val.children.length, 0); console.log(lengthOfChildren) const lengthOfArrayObjects = Object.keys(array).length; console.log(lengthOfArrayObjects) const totalLength = lengthOfChildren + lengthOfArrayObjects; console.log(totalLength)

假設每個 object 都有一個children屬性,一個選項可以是遞歸循環每個 object 的孩子,在多維數組中聚合沒有 children 屬性的對象。

如果數組有 30 個項目,則將一個新數組添加到結果數組中。

要不返回空數組,您可以使用數組過濾器刪除最后的那些。

例如

const splitChildrenToArrays = (source, result, limit) => {
    const innerLoop = (source, result) => {
        source.forEach(item => {
            const {children, ...currObj} = item;
            result[0].push(currObj);
            if (result[0].length === limit) {
                result.unshift([]);
            }
            innerLoop(item.children, result);
        });
        return result;
    }
    return innerLoop(source, result).filter(i => i.length > 0);
}

const result = splitChildrenToArrays(array, [[]], 30);

 let array = [{ "account": "0", "total": 1, "children": [{ "account": "A", "total": 1, "children": [], }], }, { "account": "1", "total": 3, "children": [{ "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], } ], }, { "account": "2", "total": 3, "children": [{ "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], } ], }, { "account": "3", "total": 12, "children": [{ "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], }, { "account": "D", "total": 1, "children": [], }, { "account": "E", "total": 1, "children": [], }, { "account": "F", "total": 1, "children": [], }, { "account": "G", "total": 1, "children": [], }, { "account": "H", "total": 1, "children": [], }, { "account": "I", "total": 1, "children": [], }, { "account": "J", "total": 1, "children": [], }, { "account": "K", "total": 1, "children": [], }, { "account": "L", "total": 1, "children": [], }, ], }, { "account": "4", "total": 16, "children": [{ "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], }, { "account": "D", "total": 1, "children": [], }, { "account": "E", "total": 1, "children": [], }, { "account": "F", "total": 1, "children": [], }, { "account": "G", "total": 1, "children": [], }, { "account": "H", "total": 1, "children": [], }, { "account": "I", "total": 1, "children": [], }, { "account": "J", "total": 1, "children": [], }, { "account": "K", "total": 1, "children": [], }, { "account": "L", "total": 1, "children": [], }, { "account": "M", "total": 1, "children": [], }, { "account": "N", "total": 1, "children": [], }, { "account": "0", "total": 1, "children": [], }, { "account": "P", "total": 1, "children": [], }, ], }, { "account": "5", "total": 12, "children": [{ "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], }, { "account": "D", "total": 1, "children": [], }, { "account": "E", "total": 1, "children": [], }, { "account": "F", "total": 1, "children": [], }, { "account": "G", "total": 1, "children": [], }, { "account": "H", "total": 1, "children": [], }, { "account": "I", "total": 1, "children": [], }, { "account": "J", "total": 1, "children": [], }, { "account": "K", "total": 1, "children": [], }, { "account": "L", "total": 1, "children": [], }, ], }, ] const splitChildrenToArrays = (source, result, limit) => { const innerLoop = (source, result) => { source.forEach(item => { const { children, ...currObj } = item; result[0].push(currObj); if (result[0].length === limit) { result.unshift([]); } innerLoop(item.children, result); }); return result; } return innerLoop(source, result).filter(i => i.length > 0); } console.log(splitChildrenToArrays(array, [ [] ], 30));

我在這里寫了一個扁平的 function :它采用所有的clildren並將嵌套的級別數據放在一個級別中:

 let arrayofData = [ { "account": "0", "total": 1, "children": [ { "account": "A", "total": 1, "children": [], } ], }, { "account": "1", "total": 3, "children": [ { "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], } ], }, { "account": "2", "total": 3, "children": [ { "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], } ], }, { "account": "3", "total": 12, "children": [ { "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], }, { "account": "D", "total": 1, "children": [], }, { "account": "E", "total": 1, "children": [], }, { "account": "F", "total": 1, "children": [], }, { "account": "G", "total": 1, "children": [], }, { "account": "H", "total": 1, "children": [], }, { "account": "I", "total": 1, "children": [], }, { "account": "J", "total": 1, "children": [], }, { "account": "K", "total": 1, "children": [], }, { "account": "L", "total": 1, "children": [], }, ], }, { "account": "4", "total": 16, "children": [ { "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], }, { "account": "D", "total": 1, "children": [], }, { "account": "E", "total": 1, "children": [], }, { "account": "F", "total": 1, "children": [], }, { "account": "G", "total": 1, "children": [], }, { "account": "H", "total": 1, "children": [], }, { "account": "I", "total": 1, "children": [], }, { "account": "J", "total": 1, "children": [], }, { "account": "K", "total": 1, "children": [], }, { "account": "L", "total": 1, "children": [], }, { "account": "M", "total": 1, "children": [], }, { "account": "N", "total": 1, "children": [], }, { "account": "0", "total": 1, "children": [], }, { "account": "P", "total": 1, "children": [], }, ], }, { "account": "5", "total": 12, "children": [ { "account": "A", "total": 1, "children": [], }, { "account": "B", "total": 1, "children": [], }, { "account": "C", "total": 1, "children": [], }, { "account": "D", "total": 1, "children": [], }, { "account": "E", "total": 1, "children": [], }, { "account": "F", "total": 1, "children": [], }, { "account": "G", "total": 1, "children": [], }, { "account": "H", "total": 1, "children": [], }, { "account": "I", "total": 1, "children": [], }, { "account": "J", "total": 1, "children": [], }, { "account": "K", "total": 1, "children": [], }, { "account": "L", "total": 1, "children": [], }, ], },] const flatten = (into, node) => { if (node == null) return into; if (Array.isArray(node)) return node.reduce(flatten, into); into.push(node); return flatten(into, node.children); }; //count per page let detailsPageLimit = 30; let detailsOut = flatten([], [arrayofData]); let numberOfDivisonDetails = Math.ceil(detailsOut.length / detailsPageLimit); let divisionsDetails = []; for (let i = 0; i < numberOfDivisonDetails; i++) { if (detailsOut.length > detailsPageLimit) { divisionsDetails.push(detailsOut.splice(0, detailsPageLimit)); } else { divisionsDetails.push(detailsOut.splice(0, detailsOut.length)); } } console.log(divisionsDetails)

暫無
暫無

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

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