// let data = ["key1":["key2":["key3":["key4":"value4"]]]]
let finishData = MVPDmHomeFeedNormalProjectItem.reformDataOnPath(path: "key1.key2.key3.key4", sourceDict: data, bottomDict: ["key4":"value5"])
print(finishData?.keys)
class func reformDataOnPath(path: String, sourceDict: [String: AnyHashable]?, bottomDict:[String: AnyHashable]) ->[String: AnyHashable]? {
guard let sourceData = sourceDict else{return nil}
// 返回值fata
var returnData = sourceData
// 存储数组
var pathDataList: [[String: AnyHashable]] = []
// 替换数据后生成的新的各级数据
var pathNewData: [String: AnyHashable]?
// 源数据
var transformDict: [String: AnyHashable]?
let pathList = path.split(separator: ".")
pathList.forEach { pathStr in
// guard let pathKey = pathStr as? String else {return}
if let transform = transformDict {
if let result = transform[String(pathStr)] as? [String: AnyHashable] {
transformDict = result
pathDataList.append(result)
} else {
}
} else {
pathDataList.append(sourceData)
if let transform = sourceData[String(pathStr)] as? [String: AnyHashable] {
transformDict = transform
pathDataList.append(transform)
}
}
// 如果到了最后一个
if pathList.firstIndex(of: pathStr) == pathList.count - 1 {
pathDataList = pathDataList.reversed()
pathDataList.forEach { pathEveryData in
let index = pathDataList.firstIndex(of: pathEveryData) ?? 0
if (pathNewData != nil) {
pathNewData = pathEveryData.merging(pathNewData ?? ["qqq":"ppp"]) { _, new in
return new
}
if pathList.count - index - 2 >= 0 {
let pathName = pathList[pathList.count - index - 2]
pathNewData = [String(pathName): pathNewData]
}
} else {
let pathName = pathList[pathList.count - 2]
pathNewData = pathEveryData.merging(bottomDict) { _, new in
return new
}
pathNewData = [String(pathName): pathNewData]
}
if index == pathDataList.count - 1 {
}
}
}
}
return pathNewData
}