首页 > 解决方案 > 嵌套对象上的 Join(';')

问题描述

我正在尝试将对象中的所有值连接到分号分隔,如果对象只是一个级别,它可以正常工作:

obj = { 
    name: "one"
    additionalInfo: "hello"
    ...
};

Object.values(obj).join(';')

结果:一个;你好

但是如果对象是嵌套的:

obj = { 
    name: "one"
    additionalInfo: {
         description: "hello",
         ...
    }
};

Object.values(obj).join(';')

结果:一;[对象对象]

除了 name 之外的其余值当然是 [object Object]。我如何也加入 2 级值?

我想要的结果是:

one;hello

标签: javascriptobjectecmascript-6

解决方案


要达到预期的结果,请使用以下将对象更改为字符串的选项并使用:}查找值

  1. 使用JSON.stringify将obj 更改为字符串 并用“ ”分割
  2. 获取“ : ”和“ , ”之间的单词以及“ : ”和“ } ”之间的结束词
  3. 使用 repalce 删除不需要的字符

工作代码示例并添加了更多测试对象

obj = { 
    name: "one",
    additionalInfo: {
         description: "hello",
    },
    test: "abc",
    grandparent: {
      parent: {
        child: "child"
      }
    }
};

function concatObj(obj){
  let str = JSON.stringify(obj).split(":");
  return str.map(v => v.substr(0, v.indexOf(",")) || v.substr(0, v.indexOf("}"))).filter(Boolean).join(":").replace(/"|}|{/g,'')  
}

console.log(concatObj(obj))

codepen - https://codepen.io/nagasai/pen/pXpwdM?editors=1010


推荐阅读