在 Javascript 中将对象连接为空格分隔字符串的最简单方法是什么?

What is the simplest way to Join a object as a space separated string in Javascript

本文关键字:字符串 最简单 方法 是什么 分隔 空格 Javascript 对象连接      更新时间:2024-01-01

All:

我想从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 之外的所有内容(尽管 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)"