Javascript / FP / Reduce:将基于字符串的层次结构转换为嵌套对象

时间:2015-12-02 16:43:27

标签: javascript functional-programming reduce

(注意mods:这不是'最快的扁平/非扁平嵌套JSON对象的方法'的副本,所提出的问题有些不同)

我需要将基于字符串的数据层次表示转换为嵌套的javascript对象表示。

我认为lodash/collection/reduce可能有用。但是,改变/减少像这样的格式的最佳方法是什么;

{
 "a/b/c": 1,
 "a/b/d": 1,
 "e/f/g/h": 1,
 "e/f/g/i/j": 1
}

这样的事情?

{ 
  "a": { 
    "b": { 
      "c": 1, 
      "d": 1 
    } 
  },
  "e": {
   "f": {
     "g": {
      "h": 1,
      "i": {
        "j": 1
      }
     }
   }
  }
}

1 个答案:

答案 0 :(得分:2)

splitreduce使用原生javascript(对不起,不太熟悉lodash)



var testObject = {
 "a/b/c": 1,
 "a/b/d": 1,
 "e/f/g/h": 1,
 "e/f/g/i/j": 1
};

var targetObject = {}

Object.keys(testObject).forEach(function(currentKey) {
  var currentValue = testObject[currentKey];
  currentKey.split('/').reduce(function(generatedObject, generatedKey, currentIndex, array) {
    if (!generatedObject[generatedKey]) {
      generatedObject[generatedKey] = {};
    }
    if (currentIndex == array.length - 1) {
      generatedObject[generatedKey] = currentValue;
    }
    return generatedObject[generatedKey];
  }, targetObject);
});

console.log(targetObject);