美化JavaScript中的函数

时间:2019-03-05 20:34:39

标签: javascript json string function object

我正在编写一个简单的PrettyPrint函数,该函数只能在字符串和对象中进行较浅的遍历。

我认为这非常接近

就是

  {
    "name": "Jon",
    "facts": {
      "car": "Ford",
      "address": {
        "city": "New York"
      },
      "watch": "Casio",
      "other": {}
    },

 }

the},以及右括号之前的空格,我该如何解决,使其输出就像JSON.Stringify一样?

  {
    "name": "Jon",
    "facts": {
      "car": "Ford",
      "address": {
        "city": "New York"
      },
      "watch": "Casio",
      "other": {}
    }
 }

const exampleJson = {"name":"Jon","facts":{"car":"Ford","address":{"city":"New York"},"watch":"Casio","other": {}}};

const prettify = obj => {

  tabs = n => Array(n).fill(' ').join('');

  let traverse = (obj, tab = 1) => {
    let markup = '{\n';

    Object.entries(obj).forEach(kv => {
      const [key, val] = kv;
      if (typeof val === 'string') {
        const { length } = Object.keys(val);
        markup += `${tabs(tab)} "${key}": "${val}"`;
      } else if (typeof val === 'object') {
        const { length } = Object.keys(val);
        if (length > 0) {
          markup += `,\n${tabs(tab)} "${key}": ${traverse(val, tab+2)},\n`;
        } else {
          markup += `,\n${tabs(tab)} "${key}": {}`;
        }

      }
    })
    
    markup += `\n${tabs(tab - 1)}}`;
    return markup;
  }

  let results = traverse(obj);

  console.log(results);
}

prettify(exampleJson);

2 个答案:

答案 0 :(得分:2)

在这种情况下,您要添加逗号,但在另一种情况下,请不要添加逗号。在一般情况下,这将永远行不通。

相反,无论值如何,都应使用逗号和换行符。除了第一个外,其他任何一个都可以

 Object.entries(obj).forEach(([key, value], i) => {
   if(i) markup += ",\n";
   markup += tabs(tab);
   markup += key + ": ";
   // serialize and add value
 });

或将其附加到除最后一个以外的任何内容上:

Object.entries(obj).forEach(([key, value], i, { length }) => {
   markup += tabs(tab);
   markup += key + ": ";
   // serialize and add value
   if(i !== length - 1) markup += ",\n";
});

答案 1 :(得分:1)

您可以通过g()设置一些字符来一次解决这两个问题:

square
replace