Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将嵌套对象转换为字符串索引对象_Javascript_Vue.js - Fatal编程技术网

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

Javascript 如何将嵌套对象转换为字符串索引对象,javascript,vue.js,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.

我正在尝试将嵌套对象转换为字符串索引对象,以便可以使用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'
}
中的答案与我想要的非常接近。但是我想要的是得到嵌套对象的属性字符串

有没有更好的办法

谢谢。

试试这个

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, '', {});