javascript - 在交叉链接函数中保存嵌套级别

标签 javascript algorithm

我具有查看大量对象并将特定属性推送到新对象中的功能。我想将当前对象的级别保存为新对象的属性。 ( 数据[0]、数据[1]、.. - 级别 1, 数据[0].childs[0], data[1].childs[0], .. - level2 ... )
但是我的代码中有两个交叉链接函数,我不知道该怎么做。

 var data = [
	{a1: 1, a2: 2, childs: [{a1: 12, a2: 13, childs: [{a1: "test114", childs:[]}]}, {a1: 114, a2: 115, childs: [{a1:1116, a2: 1117, childs: []}]}] },
	{a1: 3, a2: 4, childs: [{a1: 22, a2: 23, childs: []}, {a1: 224, a2: 223, childs: [{a1:2221, a2: 2222, childs: []}]}] },
	{a1: 5, a2: 6, childs: [{a1: 32, a2: 33, childs: []}] },
	{a1: 7, a2: 8, childs: []}
 ];


var mass = [];
var newarray = [];
var level = 1;



function go() {
	returnObject(data, mass);
  console.log(mass);
}

function returnObject(obj, arr) {

	
	obj.forEach(function(item) {
	  returnObject2(item, arr);
	});
}

function returnObject2(obj, arr){
		console.log(obj);
		console.log(arr)

		if(Array.isArray(obj)){
			return
		}

		if (obj.childs.length > 0){

			arr.push({new:obj.a1, childs: obj.childs, level: level});
			level+=1;
			return returnObject(obj.childs, arr);
		}
		else {
			return arr.push({new:obj.a1, childs: [], level: level});
		}
}
<button onClick=go()> go!</button>

最佳答案

不要让 level 成为全局的,传递它!

function returnObject(obj, arr, level) {
    obj.forEach(function(item) {
      returnObject2(item, arr, level + 1);
    });
}

function returnObject2(obj, arr, level){
   ...
   return returnObject(obj.childs, arr, level + 1);

etc

关于javascript - 在交叉链接函数中保存嵌套级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52755605/

相关文章:

javascript - 在html中执行javascript

c# - 如何从多维数组创建字符串向量?

performance - 在每个给定区域找到最小值的有效方法

algorithm - 在源代码中查找模式

arrays - 在二分查找中,为什么向后遍历比向前遍历花费更多?

Javascript 更改样式表中的值

javascript - 单击事件的事件处理程序自动触发 - jQuery

algorithm - 调度算法

javascript - 如何使用 AJAX 基于数据库中的值创建动态复选框?

javascript - console.log 的非 volatile 替代品