当未设置限制时,动态数组切片以限制长度

时间:2017-04-29 23:04:37

标签: javascript slice

我有一个班级

function Thing (n) {
    this.limit = n // null or int n
    this.table = [1, 2, 3, 4]
}

我想为美学做这件事

Thing.prototype.test = function () {
    let that = this;
    return this.table
               .slice(0, that.limit) // this line
               .map() // etc
}

因为上面是简化的代码,实际的table是另一个类的实例,并且在slice()之前有另一个实例方法和一个map()。

所以我想知道是否有办法强制切片切片到Thing.limit(如果存在),否则切片并返回整个数组。 (在最后一个map()之前,数组可能很小)。像

这样的东西
Thing.prototype.test = function () {
    let that = this;
    return this.table
               .slice(0, (that.limit == null) ? this.length : that.limit)
               .map() // etc
}

这不起作用,我收到错误

ReferenceError: that is not defined

作为一个侧面问题,slice()中的this上下文是什么?这是一个愚蠢的问题吗?

注意this.table.slice(0, -1) => [1, 2, 3]this.table.slice(0, 0) => []

我可以更改Thing.limit的保存方式,而且这主要是因为我很好奇,因为我已经将功能更改为slice this.plan.limit存在&& > this.table.length。

实例化类的代码是

const gadget = new Gadget();
const query = new Thing(gadget);
const result = query.get(); 

可能相关:在实际代码中,在query.get()内部,还有一个名为getRowIds的函数在slice()之前被调用,然后是一个非常基本的map()。< / p>

错误发生在slice()

1 个答案:

答案 0 :(得分:1)

undefined与slice的第二个参数一起使用将为您提供所需的行为。如果由于某种原因你接受0作为限制,如果有一个空表是一个东西,那么你可以使用它。

function Thing (n) {
    this.limit = n; // undefined or int
    this.table = [1, 2, 3, 4]
}


Thing.prototype.test = function () {
    return this.table
               .slice(0, this.limit)
               .map() // etc
}

现在小心实例,我看到你向Gadget构造函数传递Thing而不是数字的实例,所以这可能与你期望的行为不同。