公共技巧 递归的妙用

59 阅读1分钟

将空的children置为undefined

示例用法:element组件库的级联选择器如果数组的最后一级的数据的children的值为空数组,那么会导致级联选择器会多出一个空白的最后一层

1.  // 格式化数据,递归将空的children置为undefined
formatData(data) {
  for (var i = 0; i < data.length; i++) {
    if (data[i].children.length < 1) {
      data[i].children = undefined
    } else {
    this.formatData(data[i].children)
    }
  }
  return data
}

根据id查找层级不确定的数据对应的数据

也就是根据给定的id查找到与id值一样的数据

findDataById(data, id) {
	for (let i = 0; i < data.length; i++) {
		if (data[i].id == id) {
			return data[i];
		} else if (data[i].childlist) {
			const result = this.findDataById(data[i].childlist, id);
			if (result) {
				return result;
			}
		}
	}
	return null;
}

根据id查找层级不确定的数据对应的name

digui(arr, id) {
  for (let i = 0; i < arr.length; i++) {
    const item = arr[i];
    if (item.id === id) return item.name;
    if (item.children && item.children.length > 0) {
	const name = this.digui(item.children, id);
	if (name) return name;
    }
  }
  return '没有找到相关数据';
}

获取当前id所处的数据的所有父级数据

findParentData(data, id, parents = []) {
	for (let i = 0; i < data.length; i++) {
		if (data[i].id == id) {
			return parents;
		} else if (data[i].children) {
			const result = this.findParentData(data[i].children, id, [...parents, data[i]]);
			if (result) {
				return result;
			}
		}
	}
	return null;
}