Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用“角度”计算子项和在父项中显示的总数量_Javascript_Angularjs - Fatal编程技术网

Javascript 如何使用“角度”计算子项和在父项中显示的总数量

Javascript 如何使用“角度”计算子项和在父项中显示的总数量,javascript,angularjs,Javascript,Angularjs,我的成绩集 id Parent text type Cr 1 0 Parent1 Default 0.00 2 1 parent1.1 Default 0.00 3 1 parent1.2 Default 0.00 4 2 Child1 Master 10.00 5 2 child2 Master

我的成绩集

id  Parent      text        type        Cr

1   0       Parent1     Default     0.00
2   1       parent1.1   Default     0.00
3   1       parent1.2   Default     0.00
4   2       Child1      Master      10.00
5   2       child2      Master      20.00
6   3       child1      Master      25.00
7   3       child2      Master      50.00
我有以下数据集,我想计算要显示在父项中的孩子总数和主父项中的所有子父项总数

树的结构是这样的

                               Total Cr 
Parent1---------------------------105
    parent1.1---------------------30
        Child1------------10
        child2------------20
    parent1.2---------------------75
        child1------------25
        child2------------50
我已经试过了

for (i = 0; i < $scope.treeData.length; i++) {
    if ($scope.treeData[i].type == 'default') {

        var ICr = 0.00;
        angular.forEach(data.Table, function (items456) {

            var Itm123Cr = eval(items456.Cr);

            IDr += parseFloat(Itm123Cr == undefined ? 0 : Itm123Cr),

            $scope.treeData[i] = {
                "id": $scope.treeData[i].id, "parent": $scope.treeData[i].parent, "text": $scope.treeData[i].text,
                "data": {

                    "Cr": ICr
                },
                "type": $scope.treeData[i].type,
            }

            });

    }
}

对不起,另一个答案。。这是不对的。我误解了这个问题

请看以下内容:

var data = [
{id: 1, parent: null, type: 'default', text: 'root', cr: 0},
{id: 2, parent: 1, type: 'default', text: 'Parent 1', cr: 0},
{id: 3, parent: 1, type: 'default', text: 'Parent 2', cr: 0},
{id: 4, parent: 2, type: 'master', text: 'Child 1 P1', cr: 10},
{id: 5, parent: 2, type: 'master', text: 'Child 2 P1', cr: 20},
{id: 6, parent: 3, type: 'master', text: 'Child 1 P2', cr: 25},
{id: 7, parent: 3, type: 'master', text: 'Child 2 P2', cr: 50}
];


function run() {


data.forEach(function (item, index, arr) {
    if (item.parent != null) {
        //something like:
        var indexOfParent = findParent(item.parent);
        if (indexOfParent === -1) {
            //ERROR! no parent found!
            console.warn('No parent found!');
        }
        else {
            var parent = data[indexOfParent];//0based
            if (!parent.children) {
                parent.children = [];
            }
            parent.children.push(item);
        }
    }
});

//new function
function findParent(parentId){
    var index;
    index = data.findIndex(function(element){
       return element.id == parentId;
    });
    return index
}

function normalize(parent) {
    if (parent.parent != null) {
        if (parent && parent.children) {
            for (var i = 0, l = parent.children.length; i < l; ++i) {
                var child = parent.children[i];
                parent.cr += child.cr;
                //child.index = i;
                //if (!child.parentId) child.parentId = parent.id || '0';
                normalize(child);
            }
        }
        else {
            console.log(parent.cr);
        }
    }
}

data.forEach(function (a) {
    normalize(a)
})
//UPDATE 2
var rootIndex = data.findIndex(function(element){
    return element.parent == null;
})

var root = data[rootIndex];
root.children.forEach(function(child){
    root.cr+=child.cr;
})
//normalize(data);
}

run();

感谢Jordy的回复,我在前面给出了示例数据,我的原始数据有问题,我添加了代码更新了我的问题。。我在这里遇到问题var parent=data[item.parent-1];我在Sequences中没有父id我尝试更改代码,但由于浏览器中的最大调用库存超过DederRor而出现问题console@sumangoud,我用findParent函数更新了答案。另外,请查看以下站点作为参考。如果这是正确答案,请将其标记为回答如何在计算后从数组中删除子项。。我尝试过这一点,但不适用于var k=data.length-1;k>=0;k-{var children=data[0]。children;if children!=未定义的{data.children.stiplek,1;}在那里被敲打,剩余的计算工作正常
var data = [
{id: 1, parent: null, type: 'default', text: 'root', cr: 0},
{id: 2, parent: 1, type: 'default', text: 'Parent 1', cr: 0},
{id: 3, parent: 1, type: 'default', text: 'Parent 2', cr: 0},
{id: 4, parent: 2, type: 'master', text: 'Child 1 P1', cr: 10},
{id: 5, parent: 2, type: 'master', text: 'Child 2 P1', cr: 20},
{id: 6, parent: 3, type: 'master', text: 'Child 1 P2', cr: 25},
{id: 7, parent: 3, type: 'master', text: 'Child 2 P2', cr: 50}
];


function run() {


data.forEach(function (item, index, arr) {
    if (item.parent != null) {
        //something like:
        var indexOfParent = findParent(item.parent);
        if (indexOfParent === -1) {
            //ERROR! no parent found!
            console.warn('No parent found!');
        }
        else {
            var parent = data[indexOfParent];//0based
            if (!parent.children) {
                parent.children = [];
            }
            parent.children.push(item);
        }
    }
});

//new function
function findParent(parentId){
    var index;
    index = data.findIndex(function(element){
       return element.id == parentId;
    });
    return index
}

function normalize(parent) {
    if (parent.parent != null) {
        if (parent && parent.children) {
            for (var i = 0, l = parent.children.length; i < l; ++i) {
                var child = parent.children[i];
                parent.cr += child.cr;
                //child.index = i;
                //if (!child.parentId) child.parentId = parent.id || '0';
                normalize(child);
            }
        }
        else {
            console.log(parent.cr);
        }
    }
}

data.forEach(function (a) {
    normalize(a)
})
//UPDATE 2
var rootIndex = data.findIndex(function(element){
    return element.parent == null;
})

var root = data[rootIndex];
root.children.forEach(function(child){
    root.cr+=child.cr;
})
//normalize(data);
}

run();