提问人:Jupiter 提问时间:11/5/2023 最后编辑:Jupiter 更新时间:11/5/2023 访问量:73
用于从对象中生成字符串的函数
function for making a string out of an object
问:
我需要制作一个函数,从对象的键/值对生成字符串。
字符串应为 : 。和每个键/值对周围有空格,逗号和空格(最后一个除外)之间有空格。"key = value, key = value"
=
所以会.{a: "1'", b: "2"}
"a = 1, b = 2"
我正在尝试学习,所以不要直接给我代码,我主要需要知道我错在哪里,并指导我找到正确的答案。 我目前有:
const obj = {};
const string = [];
string = (string.join( ', ' ));
function stringFromObject(obj){
for (const [keys, values] of Object.entries(obj)) {
string.push(`${keys} = ${values}`);
console.log (string.join( ', ' ));
}
return string.toString();
}
答:
function stringFromObject(obj) {
return Object.entries(obj)
.map(([k, v]) => `${k} = ${v}`)
.join(', ')
}
console.log(stringFromObject({ a: 1, b: 2 }))
评论
Object.entries
Array.map
因为你要求的是指导,而不是直接回答:
一种方法是使用本机函数。
在 JavaScript 中,可以使用静态方法将对象字符串化,就好像它是 JSON 字符串一样。例如,对象字符串化为 {“a”:1,“b”:2}。stringify
JSON.stringify()
{a: 1, b: 2}
现在您已经掌握了该字符串,您可以在其上使用任意数量的字符串修饰符函数将其格式化为所需的方式。例如,您可以替换为(包括空格),例如::
=
function stringFromObject(obj) {
let string = JSON.stringify(obj);
// {"a":1,"b":2}
string = string.replaceAll(":", " = ");
// {"a" = 1, "b" = 2}
//...
}
我想你现在可以弄清楚整个事情了,对吧? 您可以继续更换,直到获得所需的格式。
string = string.replaceAll(":", " = ").replaceAll("\"", "");
// {a = 1,b = 2}
//...
如果您熟悉正则表达式,则可以通过一两个步骤完成整套更改。
另一种方法是遍历键值对。它适用于平面对象(没有嵌套对象),或者您需要递归遍历它们。考虑到本机功能提供的速度和便利性,对于大型嵌套对象,这将有点痛苦和不必要的慢速。
解决方案的主要问题是将传入的对象替换为空对象,因此不会打印任何内容,因为没有要打印的内容。另一个问题是,即使有一个键显示它将是一个成员的数组,每个都返回一个数组(而不是字符串),因此您应该获取数组成员。最后,即使您解决了这些问题,当前函数也仅适用于一对(除非您从另一个循环中调用此函数)。Object.keys
Object.values
评论
JSON.stringify
JSON.stringify
replaceAll
您可以在没有中间数组的情况下连接字符串,这样会快得多。您也可以添加递归来转储嵌套对象:
const obj = {a: "1", b: "2", c: {d: "3", e: "4" }};
const dumpObj = (obj, out = '') => {
for(const [k, v] of Object.entries(obj)){
out += (out ? ', ' : '') + (typeof v === 'object' ? `${k} = {${dumpObj(v)}}` : `${k} = ${v}`);
}
return out;
};
console.log(dumpObj(obj));
评论
{}
obj
keys()
values()
for … of
const string = []
const obj = {};
string = (string.join( ', ' ));
string.join( ', ' )
string.toString()