假设我有一个数组,它告诉我标签列表和将它们添加到JSON对象中所需的值。你是如何改变它的呢?
所以基本上我有一个数组和一个值100
arr = ["1", "Male"]
应该这样把它转换成一个对象。
obj = {
"1":{
"Male":100
}
}
发布于 2019-05-08 19:50:22
您可以保存最后一个属性并减少对象。最后,将该值赋给最后一个属性。
这个解决方案考虑了已经给定的属性。
function setValue(object, path, value) {
var last = path.pop();
path.reduce((o, k) => o[k] = o[k] || {}, object)[last] = value;
}
var object = {};
setValue(object, ["1", "Male"], 100);
console.log(object);
setValue(object, ["1", "Female"], 200);
console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }
发布于 2019-05-08 19:50:57
您可以使用reduceRight
来实现这一点。使用value
作为reduce的initialValue
,并在每个循环中创建一个新的嵌套级别。
function createObj(paths, value) {
return paths.reduceRight((r, key) => ({ [key] : r }), value)
}
console.log(createObj(["1", "Male"], 100))
console.log(createObj(["level 1", "level 2", "level 3" ], "value"))
https://stackoverflow.com/questions/56047921
复制