如何将字符串转换为对象表示法

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);