for*_*fly 5 javascript arrays for-loop push angularjs
我有一个JSON数组,其属性为id和parentActivityId.
$scope.data = [
{
id: 1,
activityName: "Drilling",
parentActivityId: 0,
items: [
{
id: 2,
activityName: "Blasting",
parentActivityId: 1,
items: [
{
id: 3,
activityName: "Ann",
parentActivityId: 2,
items: [],
},
{
id: 4,
activityName: "Ann",
parentActivityId: 2,
items: [],
}
]
},
{
id: 5,
activityName: "Transport",
parentActivityId: 1,
items: [
{
id: 6,
activityName: "Daniel",
parentActivityId: 5,
items: [],
}
]
}
]
}
];
Run Code Online (Sandbox Code Playgroud)
我想推出一个基于的parentActiityId新项目.新项目将有一个新的id.示例:如果我的对象是这样的:
{
id: 7,
activityName: "Drilling",
parentActivityId: 1,
items: []
}
Run Code Online (Sandbox Code Playgroud)
然后我的对象看起来像这样..
$scope.data = [
{
id: 1,
activityName: "Drilling",
parentActivityId: 0,
items: [
{
id: 2,
activityName: "Blasting",
parentActivityId: 1,
items: [
{
id: 3,
activityName: "Ann",
parentActivityId: 2,
items: [],
},
{
id: 4,
activityName: "Ann",
parentActivityId: 2,
items: [],
},
{
id: 7,
activityName: "Drilling",
parentActivityId: 2,
items: [],
}
]
},
{
id: 5,
activityName: "Transport",
parentActivityId: 1,
items: [
{
id: 6,
activityName: "Daniel",
parentActivityId: 5,
items: [],
}
]
}
]
}
];
Run Code Online (Sandbox Code Playgroud)
我尝试给这个循环..
var arrObj = {
id: 7,
activityName: "Drilling",
parentActivityId: 1,
items: []
};
function populateObj(arrObj) {
for (var i = 0; i < $scope.data.length; i++) {
if ($scope.data[i].id == arrObj.parentActivityId) {
$scope.data.push(arrObj);
}
}
};
populateObj(arrObj);
Run Code Online (Sandbox Code Playgroud)
这将只推送到parent.I想要在for循环中识别子项,并通过识别thr parentActivityId.Any帮助将推送到特定的数组对象将非常感激.
使用递归提议和Array.prototype.reduce():
var data=[{id:1,activityName:"Drilling",parentActivityId:0,items:[{id:2,activityName:"Blasting",parentActivityId:1,items:[{id:3,activityName:"Ann",parentActivityId:2,items:[]},{id:4,activityName:"Ann",parentActivityId:2,items:[]}]},{id:5,activityName:"Transport",parentActivityId:1,items:[{id:6,activityName:"Daniel",parentActivityId:5,items:[]}]}]}],
child = { id: 7, activityName: "Drilling", parentActivityId: 1, items: [] };
function getParent(r, a) {
return a.id === child.parentActivityId ? a : a.items.reduce(getParent, r);
}
var node = data.reduce(getParent, {});
'items' in node && node.items.push(child);
document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>');Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
945 次 |
| 最近记录: |