Javascript 在嵌套对象上递归添加字段
我需要递归地在对象上添加uuid, 我如何使用javascript实现这一点 我的想法是BFS/DFS都在工作 我的想法 输入 预期结果Javascript 在嵌套对象上递归添加字段,javascript,Javascript,我需要递归地在对象上添加uuid, 我如何使用javascript实现这一点 我的想法是BFS/DFS都在工作 我的想法 输入 预期结果 let uuid=“ef910f30-fe25-0134-8f50-745c898f0819”; 函数递归添加(obj){ if(Array.isArray(obj))//如果obj是数组 forEach(addrecursive);//然后对其所有项递归调用add else if(obj&&typeof obj==“object”){//否则如果它是一个对
let uuid=“ef910f30-fe25-0134-8f50-745c898f0819”;
函数递归添加(obj){
if(Array.isArray(obj))//如果obj是数组
forEach(addrecursive);//然后对其所有项递归调用add
else if(obj&&typeof obj==“object”){//否则如果它是一个对象(需要“obj&&”部分,因为typeof null==“object”)
obj.id=uuid;//向其添加id属性
Object.keys(obj.forEach(k=>addRecursively(obj[k]));//然后对其所有项递归调用add
}
}
让obj={“viewType”:“列表视图”,“节”:[{“字段”:[“Id”,“Name”]},{“children”:[{“Name”:“no”}]};
递归加法(obj);
控制台日志(obj)代码>您应该注意到,typeof[]==“object”!==“数组”
因为数组是JS中的对象<代码>结构。地图
只是一种浪费!它正在创建一个新的数组,而这个数组不在任何地方使用forEach
更好structure.map(this.adddrecursive)
是structure.map(item=>this.adddrecursive(item))的快捷方式
<代码>开关案例中没有中断语句的人是无用的@易卜拉欣·赫里尔:在返回后,你为什么需要休息
?谢谢你,过去几周我一直在找这个
function addIdRecursively(root){
if(root is a Object){
ITERATE_EACH_ATTR_IN
root.id = 'UUID'
}
else if(root is a array){
root.map(item=>addIdRecursively(item))
}
}
{
"viewType": "List View",
"sections": [
{
fields:[
'Id',
'Name'
]
},
{
"children": [
{
"name": "no"
}
]
}
]
}
{
"id": "ef910f30-fe25-0134-8f50-745c898f0819",
"viewType": "List View",
"sections": [
{
"id": "ef910f30-fe25-0134-8f50-745c898f0819",
fields:[
'Id',
'Name'
]
},
{
"id": "ef910f30-fe25-0134-8f50-745c898f0819",
"children": [
{
"id": "ef910f30-fe25-0134-8f50-745c898f0819",
"name": "no"
}
]
}
]
}
// Generate a v4 UUID (random)
import stringMatching = jasmine.stringMatching;
import {log} from "../Util";
const uuidV4 = require('uuid');
// uuidV4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'
export default class UUIDGenerator {
structure = null
constructor(structure) {
this.structure = {
"viewType": "List View",
"sections": [
{
fields:[
'Id',
'Name'
]
},
{
"children": [
{
"name": "no"
}
]
}
]
}
}
process(){
this.addIdRecursively(this.structure)
log(this.structure)
debugger
return this.structure
}
addIdRecursively(structure){
switch (typeof structure){
case 'array':
return structure.map(item => this.addIdRecursively(item))
case 'object':
for (var key in structure) {
this.addIdRecursively(structure[key])
}
structure.id = uuidV4()
return structure
}
}
}