getData(orglist ) { //orglist 为要处理的数据 res = {} for (let i = 0; i < orglist.length; i++) { let row = orglist[i] row.parentId = row.parentId ? row.parentId : 0 if (res[row.oid]) { Object.assign(res[row.oid], { oid: row.oid, name: row.name }) } else { res[row.oid] = { oid: row.oid, name: row.name, children: [] } } if (res[row.parentId]) { res[row.parentId].children.push(res[row.oid]) } else { res[row.parentId] = { children: [res[row.oid]] } } } return res[0].children }
注:Object.assign()
方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
语法
Object.assign(target, ...sources)
参数
target 目标对象。
sources 源对象。
返回值
目标对象。
描述
如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖。后面的源对象的属性将类似地覆盖前面的源对象的属性。Object.assign
方法只会拷贝源对象自身的并且可枚举的属性到目标对象。该方法使用源对象的[[Get]]
和目标对象的[[Set]]
,所以它会调用相关 getter 和 setter。因此,它分配属性,而不仅仅是复制或定义新的属性。如果合并源包含getter,这可能使其不适合将新属性合并到原型中。为了将属性定义(包括其可枚举性)复制到原型,应使用Object.getOwnPropertyDescriptor()
和Object.defineProperty()
。String
类型和 Symbol
类型的属性都会被拷贝。
在出现错误的情况下,例如,如果属性不可写,会引发TypeError
,如果在引发错误之前添加了任何属性,则可以更改target
对象。
注意,Object.assign
不会在那些source
对象值为 null
或 undefined
的时候抛出错误。