如何将嵌套对象转换为字符串索引对象

时间:2020-01-20 02:24:04

标签: javascript vue.js

我正在尝试将嵌套对象转换为字符串索引的对象,因此我可以使用Vue显示对象中的所有属性。例如:

var obj = {
  key1: 'value1',
  key2: {
    key3: {
      key5: 'value5',
      key6: 'value6'
    },
    key4: 'value4'
  }
};

应转换为此:

var obj = {
  'key1': 'value1',
  'key2.key3.key5': 'value5',
  'key2.key3.key6': 'value6',
  'key2.key4': 'value4'
}

我试图递归地遍历对象,但是我没有弄清楚如何获取正确的索引值并同时返回索引和对象。

到目前为止我已经尝试过:

// let result = objConversion(obj)
objConversion (obj) {
  let resultObject = {}
  // Walk through the first level
  for (let index in obj) {
    if (obj.hasOwnProperty(index)) {
      let extractedObj = getObjNameRecursive(obj[ index ], index)
      resultObject = { ...resultObject, ...extractedObj }
    }
  }
  return resultObject
}

getObjNameRecursive (obj, name) {
  let resultObject = {}
  if (typeof obj === 'object') {
    // Dive into an object
    for (let index in obj) {
      if (obj.hasOwnProperty(index)) {
        if (typeof obj[ 'index' ] === 'object') {
          resultObject = { ...resultObject, ...getObjNameRecursive(obj[ 'index' ], name + '.' + index) }
        } else {
          resultObject = {...resultObject, [name + '.' + index]: obj[index]}
        }
      }
    }
  } else {
    // Simple assign if not an object
    resultObject[ name ] = obj
  }
  return resultObject
}

但这给出的结果如下:

obj = {
  'key1': 'value1',
  'key2.key3.key5': [object Object],
  'key2.key3.key6': [object Object],
  'key2.key4': 'value4'
}

Convert string to an attribute for a nested object in javascript中的答案与我想要的非常接近。但是我想要的是获取嵌套对象的属性字符串。

还有更好的方法吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

尝试一下

function convert(obj, key, result) {
  if(typeof obj !== 'object') {
    result[key] = obj;
    return result;
  }
  const keys = Object.keys(obj);

  for(let i = 0; i < keys.length; i++){
    const newKey = key ? (key + '.' + keys[i]) : keys[i];
    convert(obj[keys[i]], newKey, result);
  }

  return result;
}

称呼它

convert(obj, '', {});
相关问题