4 回答

TA贡献1860条经验 获得超9个赞
您可以将 Object.keys 与 map 结合起来,并使用 split 将字符串转换为数组
let data = {"[3, company1]":["role_user"], "[4, company2]":["role_admin"] }
let keys = Object.keys(data)
.map(
el =>
el.replace('[', '')
.replace(']', '')
.split(',')
.map(el => el.trim())
.map(el => isNaN(parseFloat(el))
? el
: parseFloat(el))
)
console.log("Keys: ", keys)
这是小提琴: https: //jsfiddle.net/to38g6cb/1/

TA贡献1868条经验 获得超4个赞
您想将密钥转换成什么?
如果想将其转换为普通数组,则应执行以下操作。
const httpResponse = {
"[3, company1]": ["role_user"],
"[4, company2]": ["role_admin"]
};
const convertedKeys = Object.keys(httpResponse).map(value => {
let keyArray = value.replace("[", "").replace("]", "").split(", ");
return [parseInt(keyArray[0]), keyArray[1]];
});
console.log(convertedKeys);
如果以上不是您想要的,请再次改写您的问题。

TA贡献2065条经验 获得超14个赞
您可以使用字符串删除第一个和最后一个slice(1,-1)字符split(/\s*,\s*/逗号,两边可选空格)。
然后将第一部分转换为数字并返回数组
const input = {
"[3, company1]": ["role_user"],
"[4, company2]": ["role_admin"]
}
const output = Object.keys(input).map(k => {
const [n, comp] = k.slice(1,-1).split(/\s*,\s*/)
return [+n, comp]
})
console.log(JSON.stringify(output))

TA贡献1812条经验 获得超5个赞
如果该部分已经被引用会更容易company1,这样您就可以使用JSON.parse. 事实上,让我们这样做吧!company1在带有搜索和替换的部分周围加上引号。
let key = `[3, company1]`;
let obj = JSON.parse(key.replace(/[$A-Z_]\w*/gi, '"$&"'))
console.log(obj);
注意:我在猜测哪些字符可能是有效的,并带有一些看起来有点像 JavaScript 标识符的字符。 [$A-Z_]\w*由于反序列化歧义,显然不是逗号和右方括号。
添加回答
举报