如何将字符串转换为对象表示法
How to translate a string to object notation
我正在使用 JSON 验证器检查给定的 JSON 对象是否符合模式,如果不匹配则出现 returns 错误。我需要做的一件事是添加缺失的属性,但这些属性可能在结构中很深。验证器错误 returns 缺少属性的位置作为此格式的字符串:
'data.thing1.thing2.thingN'
我可以很容易地删除 "data." 位,但我不知道如何将其余部分翻译成任何深度的正确对象表示法。这是我到目前为止所得到的:
var attributeLineage = newField.split(".");
obj[attributeLineage[0]][attributeLineage[1]] = "";
很明显,这只适用于只有两个深度级别的情况。我需要遍历 attributeLineage
和 link 中的值,以便在任何深度正确构造给定对象中缺失的属性。如何做到这一点?
我可能遗漏了一些非常明显的东西,或者以错误的方式处理它,但我不确定如何继续。
使用 reduce()
方法获取内部对象的引用并使用拆分数组中的最后一个元素更新 属性。
var newField = 'data.thing1.thing2.thingN';
// split the string
var attributeLineage = newField.split("."),
// get last element and remove it from splitted array
prop = attributeLineage.pop();
var ob = {
data: {}
};
// get the object reference
var obj = attributeLineage.reduce(function(o, k) {
// return if nested object is defined
// else define and return it
return o[k] || (o[k] = {}) && o[k];
}, ob);
// update the inner object property
obj[prop] = "hi";
console.log(ob);
我正在使用 JSON 验证器检查给定的 JSON 对象是否符合模式,如果不匹配则出现 returns 错误。我需要做的一件事是添加缺失的属性,但这些属性可能在结构中很深。验证器错误 returns 缺少属性的位置作为此格式的字符串:
'data.thing1.thing2.thingN'
我可以很容易地删除 "data." 位,但我不知道如何将其余部分翻译成任何深度的正确对象表示法。这是我到目前为止所得到的:
var attributeLineage = newField.split(".");
obj[attributeLineage[0]][attributeLineage[1]] = "";
很明显,这只适用于只有两个深度级别的情况。我需要遍历 attributeLineage
和 link 中的值,以便在任何深度正确构造给定对象中缺失的属性。如何做到这一点?
我可能遗漏了一些非常明显的东西,或者以错误的方式处理它,但我不确定如何继续。
使用 reduce()
方法获取内部对象的引用并使用拆分数组中的最后一个元素更新 属性。
var newField = 'data.thing1.thing2.thingN';
// split the string
var attributeLineage = newField.split("."),
// get last element and remove it from splitted array
prop = attributeLineage.pop();
var ob = {
data: {}
};
// get the object reference
var obj = attributeLineage.reduce(function(o, k) {
// return if nested object is defined
// else define and return it
return o[k] || (o[k] = {}) && o[k];
}, ob);
// update the inner object property
obj[prop] = "hi";
console.log(ob);