在Javascript中将对象作为空格分隔字符串加入的最简单方法是什么

时间:2015-02-18 16:51:47

标签: javascript

所有

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

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

fmtinfo将是格式为的字符串:

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

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

由于

5 个答案:

答案 0 :(得分:4)

为了避免任何显式迭代,您可以将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()项检查。除了IE9之外的所有东西都支持Object.keys {相对良好'(尽管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("||");

答案 1 :(得分:3)

您可以使用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('||'));

答案 2 :(得分:2)

您可以迭代对象的键以获取键名及其对应的值。不是非常优雅,但由于所需的字符串格式不常见,因此需要一些工作。

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)

这是解决方案的一个方面:http://jsfiddle.net/pstricker/ec1oohsk/

答案 3 :(得分:1)

花了一段时间,但我可能已经通过两个与Object iterationchecking if JavaScript variable is function type相关的现有Stackoverflow答案按预期工作了。我希望这会有所帮助: - )

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('%'));

答案 4 :(得分:0)

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)"