在对象中转换JavaScript点缀字符串[重复]

问题描述 投票:0回答:2

给定一个JS字符串:var s = "deep.deeper.deepest",如何将其转换为如下对象:deep: {deeper: {deepest: {}}}

javascript
2个回答
2
投票
 const dottedToObj = (str, orig = {}) => (str.split(".").reduce((obj, key) => obj[key] = {}, orig), orig);

只需将字符串数组(将原始字符串拆分)减少为一组对象即可。或者功能稍差:

 function dottedToObj(str){
  const root = {};
  var acc = root;
  for(const key of str.split(".")){
    acc = acc[key] = {};
  }
  return root;
}

1
投票

一个简单的循环应该适用于此,只需在对象中向下移动一个级别时移动每个虚线属性:

const s = "deep.deeper.deepest";

function convertToObject(str) {
  const result = {};
  
  let inner = result;
  for (const key of s.split(".")) {
    // Give the object a child with this key
    inner[key] = {};
  
    // Set the current object to that child.
    inner = inner[key]
  }
  
  // Return the original
  return result;
}

console.log(convertToObject(s))
© www.soinside.com 2019 - 2024. All rights reserved.