Javascript 算法练习,对象操作
我正在做一些练习来提高我的算法技能,但我正在努力解决这个问题,数据数组的格式必须与expectedStructure匹配,并放入newStructure中。如果有人能给我一个关于如何使用ES6语法的提示,那将是非常棒的,谢谢Javascript 算法练习,对象操作,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我正在做一些练习来提高我的算法技能,但我正在努力解决这个问题,数据数组的格式必须与expectedStructure匹配,并放入newStructure中。如果有人能给我一个关于如何使用ES6语法的提示,那将是非常棒的,谢谢 const数据=[ { 名称:“风格”, 水桶:[ { 总数:38243, 比率:4.476200397255031, 名字:“浪漫”, md5:“257927a09632991b08877ef6d29bec00” }, { 计数:14414, 比率:1.68710489
const数据=[
{
名称:“风格”,
水桶:[
{
总数:38243,
比率:4.476200397255031,
名字:“浪漫”,
md5:“257927a09632991b08877ef6d29bec00”
},
{
计数:14414,
比率:1.6871048956942187,
名称:“复古”,
md5:“257927a09632991b08877ef6d29bec00”
}
]
},
{
名称:“颜色”,
水桶:[
{
计数:26219,
比率:8.1271048953942982,
名称:“蓝色”,
md5:“257927A09632991B08877EF6D29BEC000”,
水桶:[
{
计数:11976,
比率:3.1271048953942982,
名称:“浅蓝色”,
md5:“4457168314f0e9010d425f1d9db67937”
}
]
}
]
}
]
让newStructure=[];
const expectedStructure=[
{
总数:38243,
比率:4.476200397255031,
名字:“浪漫”,
md5:“257927A09632991B08877EF6D29BEC000”,
字段:“样式”,
标签:“风格=浪漫”
},
{
计数:14414,
比率:1.6871048956942187,
名称:“复古”,
md5:“257927A09632991B08877EF6D29BEC000”,
字段:“样式”,
标签:“风格=复古”
},
{
计数:26219,
比率:8.1271048953942982,
名称:“蓝色”,
md5:“257927A09632991B08877EF6D29BEC000”,
字段:“颜色”,
标签:“颜色=蓝色”
},
{
计数:11976,
比率:3.1271048953942982,
名称:“浅蓝色”,
md5:“4457168314f0e9010d425f1d9db67937”,
字段:“颜色”,
标签:“颜色=浅蓝色”
}
]
您可以在字段上使用闭包,并对无限嵌套的存储桶使用迭代和递归方法
var data=[{name:“style”,bucket:[{count:38243,ratio:4.476200397255031,name:“romatic”,md5:“257927a0963991b08877ef6d29bec00”},{count:14414,ratio:1.6871048956942187,name:“retro”,md5:“257927a0932991b08877ef6d29bec00”},{name:“color”,bucket:[{count:26219,ratio:8.1278953942982,name:“blue”,md5:“257927a09632991b08877ef6d29bec00”,存储桶:[计数:11976,比率:3.1271048953942982,名称:“浅蓝色”,md5:“4457168314f0e9010d425f1d9db67937”}],
result=data.reduce((r,{name:field,bucket})=>
reduce(函数iter,{count,ratio,name,md5,bucket=[]}){
s、 push({count,ratio,name,md5,field,label:[field,name].join('=')});
返回桶。减少(iter,s);
},r),[]);
console.log(结果);
。作为控制台包装{max height:100%!important;top:0;}
您可以在字段
上使用闭包,并对无限嵌套的存储桶
使用迭代和递归方法
var data=[{name:“style”,bucket:[{count:38243,ratio:4.476200397255031,name:“romatic”,md5:“257927a0963991b08877ef6d29bec00”},{count:14414,ratio:1.6871048956942187,name:“retro”,md5:“257927a0932991b08877ef6d29bec00”},{name:“color:“color”,bucket:[{count:26219,ratio:8.1278953942982,name:“blue”,md5:“257927a09632991b08877ef6d29bec00“,存储桶:[计数:11976,比率:3.1271048953942982,名称:“浅蓝色”,md5:“4457168314f0e9010d425f1d9db67937”}],
result=data.reduce((r,{name:field,bucket})=>
reduce(函数iter,{count,ratio,name,md5,bucket=[]}){
s、 push({count,ratio,name,md5,field,label:[field,name].join('=')});
返回桶。减少(iter,s);
},r),[]);
console.log(结果);
.as控制台包装{max height:100%!important;top:0;}
这里有一种方法可以使用递归实现这一点。
为了代码的可读性,我将这些函数分解为多个函数
const数据=[
{
名称:“风格”,
水桶:[
{
总数:38243,
比率:4.476200397255031,
名字:“浪漫”,
md5:“257927a09632991b08877ef6d29bec00”
},
{
计数:14414,
比率:1.6871048956942187,
名称:“复古”,
md5:“257927a09632991b08877ef6d29bec00”
}
]
},
{
名称:“颜色”,
水桶:[
{
计数:26219,
比率:8.1271048953942982,
名称:“蓝色”,
md5:“257927A09632991B08877EF6D29BEC000”,
水桶:[
{
计数:11976,
比率:3.1271048953942982,
名称:“浅蓝色”,
md5:“4457168314f0e9010d425f1d9db67937”
}
]
}
]
}
]
让newStructure=[];
const expectedStructure=[
{
总数:38243,
比率:4.476200397255031,
名字:“浪漫”,
md5:“257927A09632991B08877EF6D29BEC000”,
字段:“样式”,
标签:“风格=浪漫”
},
{
计数:14414,
比率:1.6871048956942187,
名称:“复古”,
md5:“257927A09632991B08877EF6D29BEC000”,
字段:“样式”,
标签:“风格=复古”
},
{
计数:26219,
比率:8.1271048953942982,
名称:“蓝色”,
md5:“257927A09632991B08877EF6D29BEC000”,
字段:“颜色”,
标签:“颜色=蓝色”
},
{
计数:11976,
比率:3.1271048953942982,
名称:“浅蓝色”,
md5:“4457168314f0e9010d425f1d9db67937”,
字段:“颜色”,
标签:“颜色=浅蓝色”
}
]
//步骤3:取出所需的值并将其推入newStructure
//您可以从对象中删除桶,并扩展其余属性
//ES6;)
函数addToStructure(字段,v){
常量{bucket,…all}=v;
设obj={
全部的
领域
标签:`${field}=${v.name}`
};
新结构推送(obj);
}
//步骤2:开始遍历存储桶,将对象添加到newStructure
//
//另外,检查是否有嵌套的bucket,然后
//重现