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();