我正在尝试用随机唯一ID值替换“id”的每个实例。
有没有办法一次性更换所有这些?
我的代码:
var theobject = [
{
"id":"lol",
"milk":[
{
"id":"lol",
"waffle":[
{
"id":"lol",
"eggo":[]
}
]
},
{
"id":"lol",
"cookies":[]
}
]
},
{
"id":"lol",
"donut":[
{
"id":"lol",
"cheeto":[]
}
]
}
];
答案 0 :(得分:1)
尝试以下内容,一个简单的递归解决方案,它将更新所有id:
var theobject =[{"id":"lol","milk":[{"id":"lol","waffle":[{"id":"lol","eggo":[]}]},{"id":"lol","cookies":[]}]},{"id":"lol","donut":[{"id":"lol","cheeto":[]}]}];
function updateId(arr){
for(var i = 0; i < arr.length;i++){
Object.keys(arr[i]).forEach((key)=>{
if(arr[i][key].constructor.toString().indexOf("Array") > -1)
updateId(arr[i][key]);
});
if(arr[i].id)
arr[i].id = Math.random().toString(36).slice(-8);
}
}
updateId(theobject);
console.log(theobject);
答案 1 :(得分:0)
使用ramda
帮助修改对象,使用cuid
生成唯一ID:
const cuid = require('cuid')
const { evolve, map } = require('ramda')
const replaceIds = obj =>
evolve({
id: cuid,
children: map(replaceIds)
}, obj)
map(replaceIds, theobject) // usage
输出:
[
{
"id": "cji6e7qbf000cppatumn9nf6c",
"children": [
{
"id": "cji6e7qbf000dppatymupdw5r",
"children": [
{
"id": "cji6e7qbf000eppatbn3v7qlt",
"children": []
}
]
},
{
"id": "cji6e7qbf000fppat2ermw8jn",
"children": []
}
]
},
{
"id": "cji6e7qbf000gppatuxiv0bsh",
"children": [
{
"id": "cji6e7qbf000hppatx3em7n0e",
"children": []
}]
}
]
注意:这可以回答您最初输入的问题。如果children
道具有所不同,但都是已知的,您可以这样修改:
const replaceIds = obj =>
evolve({
id: cuid,
cheeto: map(replaceIds),
cookies: map(replaceIds),
donut: map(replaceIds),
eggo: map(replaceIds),
milk: map(replaceIds),
waffle: map(replaceIds),
}, obj)
如果它们有所不同且未知,那么您需要尝试其他方法。
答案 2 :(得分:0)
最简单的方法= 递归解决方案。没有必要的图书馆。
假设您知道每个对象都有键 id
&amp; children
以下内容将按照发布的方式生效。
否则,如果对象上可能不存在密钥,则需要将每个变异范围嵌套在“if”括号内。
const makeId = (objArray) => {
return objArray.map((obj, i) => {
obj.id = Math.floor(Math.random() * 1234567890); // Just making a simple ID. Typically use "uuid" or some other ID libarary generator.
if (obj.children.length) obj.children = makeId(obj.children);
return obj;
});
}
makeId(theobject);
注意强> 该解决方案使用ES6。如果您在使用Babel为ES6设置应用程序/算法时需要帮助,请查看我撰写的here文章,该文章将指导您完成此任务。