在Javascript中将数字连接成字符串

3
myCoolObject {
  a: 0
  b: 12
  c: 24
}

我希望将abc连接起来,使它们看起来像一个唯一的字符串"a-b-c"(或在此示例中为"0-12-24")。 abc始终表示数字。将它们从int转换为string需要大量代码:如果我使用PHP或C,我会直接使用sprintf(),但是在JS中如何做到不使用toString()每个参数并编写太多代码呢?
整个代码:
var pickedDate = this.getSelectedDay().year.toString() + "-" + this.getSelectedDay().month.toString() + this.getSelectedDay().day.toString();

真的吗?在 JavaScript 中难道没有更高效的方法吗?


属性总是为a,b和c吗?还是每个对象中有任意数量的属性? - Mike Christensen
不,每次都是相同的数据结构。 - Saturnix
是的,我认为你现在所拥有的可能是最好的方法。你可以在保存这些数据的任何对象上创建一个 toString 原型。 - Mike Christensen
5个回答

6
var myCoolString = myCoolObject.a + '-' + myCoolObject.b + '-' + myCoolObject.c;

编辑:

使用ES6,您可以使用模板字符串将数字插入到字符串中:

let myCoolString = `${myCoolObject.a}-${myCoolObject.b}-${myCoolObject.c}`;

试一试:

var myCoolObject = {
  a: 0,
  b: 12,
  c: 24
};

var myCoolString = myCoolObject.a + '-' + myCoolObject.b + '-' + myCoolObject.c;

console.log(typeof myCoolString);
console.log(myCoolString);


它们是数字:难道 JS 不会尝试将它们相加吗? - Saturnix
3
@Saturnix 因为有一个字符串在它们之间被连接起来了。如果你只想把它们连接起来(没有字符在它们之间),你可以使用 var str = "" + myCoolObject.a + myCoolObject.b + myCoolObject.c;。只要遇到一个字符串,就会发生连接而不是加法。如果需要加法,则可以使用括号。 - Ian
我添加了一个 jsFiddle 示例以进行演示。 - rink.attendant.6

2
如果你知道所有的数字都是正数,那么你可以写更少的代码来实现同样的效果,因为我们知道 JavaScript 是从左到右执行的。如何在不写太多的代码的情况下使用JS实现这一点?
var obj = {a: 0, b: 12, c: 24}; /* define object
String + Number = String
                  String + Number = String
                                    String + Number = String
String + Number + Number + Number     = String    */
  ''   +  obj.a + -obj.b + -obj.c; // = "0-12-24"

在这里使用-是因为String + -Number = "String-Number",例如:

'AK' + -47 // "AK-47"

+1 我不知道为什么这个回答被踩了 - 在我看来,它看起来是一个合法的答案。 - Saturnix
合法没问题,但是有谁能够维护这段代码呢?相比Rink的答案,你只省了两个引号和一个加号,可是可读性却大打折扣。 - Joooeey

1
  1. 尝试使用JavaScript的sprintf()

  2. 为字符串添加新方法

    if (!String.prototype.format) {
    String.prototype.format = function() {
       var args = arguments;
       return this.replace(/{(\d+)}/g, function(match, number) { 
          return typeof args[number] != 'undefined'
           ? args[number]
            : match
          ;
       });
      };
    }
    
    "{0} - {1} - {2}".format(myCoolObject.a, myCoolObject.b,myCoolObject.c)
    

1
请链接到原始代码,而不是复制粘贴它。 - georg

1
这主要是通过Array.join完成的:
var pickedDate = [
    this.getSelectedDay().year, 
    this.getSelectedDay().month, 
    this.getSelectedDay().day
].join("-")

虽然我个人更喜欢类似于Pythonic的小型实用函数format()

format = function(fmt /*, args */) {
    var args = [].slice.call(arguments, 1);
    return fmt.replace(/{(\d+)}/g, function($0, $1) { 
        return String(args[$1])
    })
}

然后:

var pickedDate = format('{0}-{1}-{2}', 
    this.getSelectedDay().year, 
    this.getSelectedDay().month, 
    this.getSelectedDay().day)

1

只需少量代码,它看起来就完美,这里是演示

myObj = {
  a: 0,
  b: 12,
  c: 24
}; 

var r="";

// iterate through all object properties
for (var p in myObj) 
{
    //concatenate it
    r+=myObj[p]+"-";
}

//remove the last dash
r=r.substring(0,r.length-1);

alert(r.substring(0,r.length-1));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接