以js打印数组值

时间:2012-10-01 16:47:48

标签: javascript arrays string code-translation

我正在尝试创建一个将运行数组并将其值收集到如下字符串的函数:'[1,2,3]'。根据给定的索引,我还需要它在某些情况下只呈现数组的一部分。例如:从索引0到索引1打印的数组[1,2,0]将如下所示:'[1,2]'。出于某种原因,我的功能根本不提供任何输出。这是:

function Tower(size, isFull) {
    this.count = 0;
    this.tower = new Array(size);

    this.add = function(disk) {
        this.tower[this.count++] = disk;
    };

    if (isFull) {
        for (var i = 1; i <= size; i++) {
            this.add(i);
        };
    }

    this.canAdd = function(disk) {
        return this.count == 0 || this.tower[this.count - 1] > disk;
    };

    this.getTopDiskValue = function() {
        return (this.count > 0) ? this.tower[this.count - 1] : 0;
    };

    this.popTop = function() {
        return this.tower[--this.count];
    };

    this.isFull = function() {
        return this.count == this.tower.length;
    };

    this.printable = function() {
        var output = "[";
        for (var i = 0; i < this.count; i++) {
            output += "" + this.tower[i] + ',';
        }
        return output.substring(0, output.length() - 1) + (output.length() > 1 ? ']' : "");
    };
}

我希望printable()函数返回字符串,以便代码:

var tower = new Tower(3,true);
alert(tower.printable());

会弹出一个警告框,上面有文字“[1,2,3]”。 该对象是Java的翻译。它在java btw中运行得很好,我猜这个翻译并不完美。

3 个答案:

答案 0 :(得分:2)

你所做的事情太复杂了。

假设您有一个声明为

的数组
var array = [1, 2, 3];

您可以使用

获得所需的字符串
return '['+array.join(',')+']';

您不需要弹出或添加功能,它们也是原生的(并且经过大量优化):

var last = array.pop()
array.push(newItem);

参考:

请注意,所有浏览器都提供了一个控制台,您可以在其中找到错误的详细说明。请查看Chrome Developer Tools上的示例。

答案 1 :(得分:1)

使用Array.join()方法:

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/join


this.printable = function() {
    var output = new Array();
    for (var i = 0; i < this.count; i++) {
        output.push(this.tower[i]);
    }
    return output.length == 0 
        ? "" 
        : "[" + output.join(",") + ']';
};

或者如果它看起来那么简单:

this.printable = function() {
    return this.count == 0 
        ? "" 
        : "[" + this.tower.join(",") + ']';
};

答案 2 :(得分:1)

JavaScript不是Java - 您不会通过调用其.length()方法获取数组或字符串的长度,而只需检索其.length属性即可。尝试调用该数字时引发的异常会导致脚本崩溃并阻止警报。这可行:

this.printable = function() {
    var output = "[";
    for (var i = 0; i < this.count; i++) {
        output += "" + this.tower[i] + ',';
    }
    return output.substring(0, output.length - 1) + (output.length > 1 ? ']' : "");
};

但是,您可以使用本机.join() method来连接数组的值。此外,您应该在Tower对象的原型上添加方法:

Tower.prototype.printable = function() {
    if (this.count)
        return "[" + this.tower.slice(0, this.count).join(",") + "]";
    else
        return "";
};

Btw:通常这个方法名为toString - 不仅为了方便起见,而且当Tower对象被转换为字符串值时也会使用它。