【发布时间】:2020-09-02 07:25:22
【问题描述】:
我有一个点表示的数组,例如:
var base = ['a.b.c','a.e','h'];
我还有一个参考对象:
var reference = {
a: {
b: {
c:"Hello",
d:"you"
},
e:"beautiful",
f:"and"
},
g:"kind",
h:"World"
};
我需要从基本标记字符串构建一个对象并从引用对象中获取值。不幸的是,我无法更改基准或参考。
我让它适用于数组的每个单独部分,但问题是当我尝试合并对象时。它用 a.e 覆盖值 a.b.c。
我想要的输出是:
var desiredOutput = {
a: {
b: {
c:"Hello"
},
e:"beautiful"
},
h:"World"
};
但是,我的输出下面的代码是:
var output = {
a: {
e: "beautiful"
},
h: "World"
};
任何帮助将不胜感激。我仅限于 Object.assign。
function convert(base,reference) {
var obj = {};
var getObjectValue = function(string, reference) {
var i = 0;
while (reference && i < string.length) {
reference = reference[string[i++]];
}
return reference;
};
for (var n = 0; n < base.length; n++) {
var s = base[n].split("."),
x = obj;
for(var i = 0; i < s.length-1; i++) {
x = x[s[i]] = {};
}
x[s[i]] = getObjectValue(s,reference);
}
return obj;
}
var base = ['a.b.c','a.e','h'];
var reference = {
a: {
b: {
c:"Hello",
d:"you"
},
e:"beautiful",
f:"and"
},
g:"kind",
h:"World"
};
var desiredOutput = {
a: {
b: {
c:"Hello"
},
e:"beautiful"
},
h:"World"
};
console.log(convert(base,reference));
【问题讨论】:
-
您是否可以导入一些第三方模块,例如 lodash?
-
不幸的是没有第 3 方库
标签: javascript object append assign