通过分割字符串javascript将字符串转换为嵌套数组对象

时间:2019-09-22 16:29:55

标签: javascript arrays object

将点表示法字符串转换为数组对象, 例如

let obj = { 'user-0-address-pincode': 665766, 'user-0-address-city': 'Chennai', 'user-1-address-pincode': 32432, 'user-1-address-city': 'Bangalore'};

// Expectation output will be
{
 user: [ 
   {
     address: {pincode: 665766, city: 'Chennai'}
   },
   {
     address: {pincode: 32432, city: 'Bangalore'}
   }
 ]
}

请帮助我解决此问题。

1 个答案:

答案 0 :(得分:-1)

您可以使用reducesplit方法来创建一个函数,该函数会将对象以键作为路径,然后基于这些键创建嵌套结构。

let obj = {
  'user-0-address-pincode': 665766,
  'user-0-address-city': 'Chennai',
  'user-1-address-pincode': 32432,
  'user-1-address-city': 'Bangalore'
};

function parse(data) {
  return Object.keys(obj).reduce((r, k) => {
    k.split('-').reduce((a, e, i, arr) => {
      const next = arr[i + 1]
      if (!next) return a[e] = data[k]
      else return a[e] || (a[e] = (!isNaN(+next) ? [] : {}))
    }, r)

    return r;
  }, {})
}

const result = parse(obj)
console.log(result)