在 Javascript 中将对象连接为空格分隔字符串的最简单方法是什么?
What is the simplest way to Join a object as a space separated string in Javascript
All:
我想从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 之外的所有内容(尽管 polyfill 并不复杂(。
该键数组通过Array.prototype.map()
转换,使用所需的字符串格式。这很简单,但不要说obj[k]
会调用其.toString()
方法(如果可用(将其转换为字符串。这允许对自定义对象进行出色的处理,因为您只需在每个对象上定义一个toString
方法,它就会被 VM 拾取。同样,IE9 和更好的版本支持这一点,但填充代码微不足道。
最后,我们将生成的字符串与 Array.prototype.join()
,它负责确保我们不会将分隔符附加到末尾或类似的东西。所有浏览器都支持此功能。
出于好奇,ES6 等效物是:
let fancyString = o => Object.keys(o).map(k => "" + k + "(" + o[k] + ")").join("||");
for..in
语句和帮助程序数组:
var info = {name:"username",age:20};
var helperArray = [];
for( var key in info ) {
if( info.hasOwnProperty( key ) ) {
helperArray.push( key + '(' + info[key] + ')' );
}
}
alert(helperArray.join('||'));
您可以遍历对象的键以获取键名称及其相应的值。不是非常优雅,但由于所需的字符串格式并不常见,因此需要一些工作。
var info = {name:"username",age:20};
var keys = Object.keys(info);
var returnVal = ""
for(var i = 0; i < keys.length; i++) {
if(returnVal.length > 0)
returnVal += "||";
returnVal += keys[i] + "(" + info[keys[i]] + ")";
}
alert(returnVal)
这是解决方案的jsfidd:http://jsfiddle.net/pstricker/ec1oohsk/
这花了一段时间,但我可能会在两个现有的 Stackoverflow 答案的帮助下让它按预期工作:对象迭代和检查 JavaScript 变量是否为函数类型。我希望这有帮助:-(
Object.prototype.join = function join(param) {
var helperArray = []
for (var key in this) {
//check that function is not printed -> join: function
if (typeof (this[key]) != "function")
helperArray.push(key + "(" + this[key] + ")")
}
return helperArray.join(param);
}
var info = {
name: "username",
age: 20
};
console.log(info.join('||'));
console.log(info.join('<>'));
console.log(info.join('%'));
Object.prototype.fancyString = function(){
var a = []
for(var prop in this) {
if(this.hasOwnProperty(prop)) {
a.push(prop + '(' + this[prop] + ')' );
}
}
return a.join('||');
}
然后你可以做:
var info = {name:"username",age:20};
info.fancyString();
// outputs: "name(username)||age(20)"
- JQuery:向多个匹配结果添加换行符的最简单方法
- 访问对象的最简单方法'的单独财产
- 用javascript修复这个JSON对象字符串最干净的方法是什么
- 检查变量是否为字符串的简单方法
- 在Scroll上更新CSS代码:简化它就不会了'不要使用JQuery和最简单的Javascript
- 什么'这是使用jQuery将一些文本锚定到外部链接的最简单方法
- 使用JS找出字符串中字符重复的最简单方法是什么
- 在 Javascript 中将对象连接为空格分隔字符串的最简单方法是什么?
- 在 JavaScript 中,将文本插入字符串的最简单方法是什么?
- 对最后一个条目进行特殊处理的连接字符串的最简单方法
- 用值替换一个或另一个字符串的最简单方法
- 将键代码转换为表示键的字符串的最简单方法
- 用锚标记替换url字符串(在文本中)的最简单方法是什么?
- 在数组中给所有字符串加上" "前缀的最简单方法是什么?(感叹号)在javascript
- 最简单的方法在javascript中本地化字符串
- 从php到jquery/ajax中获得回显或返回字符串的最简单方法是什么?
- 匹配字符串模式的最简单方法
- 在字符串中将破折号后的字母大写的最简单方法是什么
- 在JavaScript中混淆和解混淆字符串的最简单方法
- Javascript中最简单的子字符串处理方法