数组元素的函数输出"未定义"

Ani*_*pta 2 javascript prototype

我想对数组中的每个项目进行编号,如下所示:

["hello", "hi", "hey"].number()
 > ["1. hello", "2. hi", "3. hey"]
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

Array.prototype.number = function () {
    var tempNum = this;
    for (i in this) {
        tempNum[i] = tempNum[(i + 1)] + ". " + tempNum[i]
    }
    return tempNum;
}
Run Code Online (Sandbox Code Playgroud)

但这是输出:

["hello", "hi", "hey"].number()
 > ["undefined. hello", "undefined. hi", "undefined. hey"]
Run Code Online (Sandbox Code Playgroud)

为什么?我应该如何实现这一点,为什么我的代码不起作用?

Jas*_*son 5

我想你想要这样的东西:

for(var i=0, len = this.length; i<len; i++){
    tempNum[i] = (i + 1) + ". " + tempNum[i];
}
Run Code Online (Sandbox Code Playgroud)

tempNum当你不应该在你的等式的右边时,你正在使用.你得到"未定义"的原因是因为在你当前的等式中你得到的索引超出了数组的长度.

  • 不,你不会.`i`将是一个数字,1是一个数字.当您连接到句点时,它会被转换为字符串.这就是为什么我把它包裹在parens :)工作小提琴:http://jsfiddle.net/edelman/gh8EN/ (2认同)
  • 你是对的.当我写这篇评论时,我正想着(......在...中). (2认同)

Šim*_*das 5

ES5方式:

Array.prototype.number = function () {
    return this.map( function ( value, i ) {
        return ( i + 1 ) + '. ' + value;
    });
};
Run Code Online (Sandbox Code Playgroud)

现场演示: http ://jsfiddle.net/XSYTK/1/

您需要为IE8填充.map().