使用本地JavaScript将对象转换为字符串

5

我已经定义了以下对象:

let myObj = {
my: 'name',
is: 'Inigo Montoya',
prepare: 'to die!'
}

如何让myObj等于 { "my name is Inigo Montoya prepare to die!" } 是最佳方式?

我知道可以使用JSON字符串化,但我想用本地JavaScript实现它。我尝试过以下方法来获取由所有对象属性和值组成的字符串:

let combined = Object.entries(obj).forEach(entire => {
  return `${entrie[0]} ${entrie[1]}` });

但是我只得到了undefined。

我希望了解为什么在这种情况下会得到undefined,并听听您认为解决上述问题最好的方法。谢谢!!


2
.forEach always returns undefined, you probably want .map() - Pointy
forEach 没有任何意义,因为 return 不起作用... - epascarello
6个回答

8

你不能从forEach中返回,相反可以使用map将返回的字符串配对成一个数组,之后再将其拼接为一个字符串:

Object.entries(obj).map(entry => `${entry[0]} ${entry[1]}`).join(" ");

或者我只是这样做

Object.entries(obj).flat().join(" ")

感谢您的回答和简洁的解决方案!我已将其标记为答案。 - rzk666

1

forEach返回undefined。你可以使用Object.entriesreduce

let myObj = {my: 'name',is: 'Inigo Montoya',prepare: 'to die!'}

let string = Object.entries(myObj)
             .reduce((op,[key,value])=>op+= ' '+ key + ' '+ value, '')
             .trim()

console.log(string)


1
使用 String 构造函数object 转换为 string,然后使用 splitjoin 去除 :,

let myObj = {
my: 'name',
is: 'Inigo Montoya',
prepare: 'to die!'
}
console.log(String(JSON.stringify(myObj)).split(':').join(" ").split(',').join(' ').split(`"`).join(''))


我确实说过我知道可以使用JSON stringify,但我只想使用本地JavaScript来完成它 :| - rzk666

1

let myObj = {
  my: 'name',
  is: 'Inigo Montoya',
  prepare: 'to die!'
}

const res = Object.entries(myObj).map(el => el[0].concat(" " + el[1])).join(" ")


console.log(res)


0
你可以使用 `reduce()`,因为 `forEach()` 总是返回 `undefined`。

let myObj = {
  my: 'name',
  is: 'Inigo Montoya',
  prepare: 'to die!'
}

let combined = Object.entries(myObj).reduce((ac,entrie)=> ac  + ` ${entrie[0]} ${entrie[1]} ` ,'').trim();;
  console.log(combined)


不知道为什么它被踩了,但我点赞了这个。我非常喜欢这个 reduce 的方法。谢谢! - rzk666

0

let myObj = {
  my: 'name',
  is: 'Inigo Montoya',
  prepare: 'to die!'
}

var the_keys = Object.keys(myObj),
  length = the_keys.length,
  resArray = new Array(length);
  
while (length--) {
  resArray[length] = [the_keys[length], myObj[the_keys[length]]];
}
var myStr = resArray.join(" ").replace(/,/g, ' ');
console.log(myStr);

这个答案将适应那些使用不支持Object.entries的旧浏览器。 代码设置了三个变量:the_keysmyObj传递给Object.keys()的结果赋值,length分配该数组的长度属性,resArray由创建一个新数组而得到,使用length变量来设置它。然后,resArray被迭代地填充一个包含每个键及其相应值的数组。变量myStr由使用空格连接resArray的值并替换所有逗号为空格得到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接