javascript - 在 Javascript 中以空格分隔的字符串形式加入对象的最简单方法是什么

标签 javascript

全部:

我想从一个 JS 对象构建一个字符串(就像构建一个 toString 方法但像运算符重载),例如:

var info = {name:"username",age:20};
var fmtinfo = info.join("||");

fmtinfo 将是一个字符串,格式为:

"name(username)||age(20)"

不知道有没有人能给我一个简单的方法来做到这一点?

谢谢

最佳答案

为避免任何显式迭代,您可以使用 Object.keysmap 将每个键转换为相应的条目,然后简单地 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/

相关文章:

javascript - 相对 URL 作为 Nock 中的主机名

javascript - 使用表法查找最小公倍数

javascript - JavaScript 中的 JSON 编码/解码 base64 编码/解码

javascript - angularjs滚动以在ng-repeat中反击

javascript - TypeError : . 子字符串不是函数

javascript - Checkbox.checked 在 OnClick 事件函数中未定义

javascript - 以编程方式添加到 Accordion 部分 Jquery 内的列表项

javascript - Angular JS 如何使用 Protractor 获取中继器的所有行?

javascript - 我应该使用输入的 onclick 还是表单的 onsubmit 事件来使用 JavaScript 验证表单字段?

java - 在 Javascript 中运行 Java 代码?