全部:
我想从一个 JS 对象构建一个字符串(就像构建一个 toString 方法但像运算符重载),例如:
var info = {name:"username",age:20};
var fmtinfo = info.join("||");
fmtinfo 将是一个字符串,格式为:
"name(username)||age(20)"
不知道有没有人能给我一个简单的方法来做到这一点?
谢谢
最佳答案
为避免任何显式迭代,您可以使用 Object.keys
和 map
将每个键转换为相应的条目,然后简单地 join
他们在一起:
function fancyString(obj) {
return Object.keys(obj).map(function (k) {
return "" + k + "(" + obj[k] + ")";
}).join("||");
}
var foo = {name: "username", age: 20};
console.log(fancyString(foo));
提供一些关于其工作原理的解释:
调用Object.keys()
返回对象自己的可枚举键的数组,有效地结合了 for (f in o)
和 o.hasOwnProperty()
检查。 Object.keys
得到了相对良好的支持,除了 IE9(尽管 polyfills 并不复杂)。
该键数组通过 Array.prototype.map()
进行转换, 使用所需的字符串格式。这非常简单,但不要说 obj[k]
会调用其 .toString()
方法(如果可用)将其转换为字符串。这允许对自定义对象进行出色的处理,因为您可以简单地为每个对象定义一个 toString
方法,VM 将拾取它。同样,这得到 IE9 和更好的支持,但是 polyfills 是微不足道的。
最后,我们将结果字符串与 Array.prototype.join()
连接起来,它负责确保我们不会将分隔符附加到末尾或类似的东西。所有浏览器都支持这一点。
出于好奇,ES6 的等价物是:
let fancyString = o => Object.keys(o).map(k => "" + k + "(" + o[k] + ")").join("||");
关于javascript - 在 Javascript 中以空格分隔的字符串形式加入对象的最简单方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28589155/