Javascript二进制搜索原型数组

时间:2016-10-20 06:48:55

标签: javascript class prototype

首先,您要创建三个函数,作为Array类的原型返回以下内容:

toTwenty()` returns `[1, 2, 3 . . . 20]

下面是测试用例

describe('Binary Search to traverse an ordered list, effectively', function() {
  describe('Populate the arrays with valid content', function() {

    it('should create an array from 1 to 20, with intervals of 1', function() {
      expect(oneToTwenty[0]).toBe(1);
      expect(oneToTwenty[19]).toBe(20);
      expect(oneToTwenty.length).toBe(20);
      for(var i = 0; i < oneToTwenty.length - 1;i++) {
        expect(oneToTwenty[i + 1] - oneToTwenty[i]).toBe(1);
     }
    });

这是下面的代码是我的代码,但我一直在

var oneToTwenty = [].toTwenty();
"TypeError: Object  has no method 'toTwenty'"

这是我的代码

function oneToTwenty(){

}

oneToTwenty.prototype.toTwenty = function(){
    var start = 1;
    var end = 20;
    var oneToTwenty = [];

for(var i = start; i <= end; i += 1){
    oneToTwenty.push(i);
}
   return oneToTwenty;
}

1 个答案:

答案 0 :(得分:0)

这个var oneToTwenty = [].toTwenty();让我觉得你正在尝试更改Array原型,而不是创建一个新类型。您无法覆盖数组文字的含义,但您可以添加本机类型的方法:

Array.prototype.toTwenty = function(){
    var start = 1;
    var end = 20;

    for(var i = start; i <= end; i += 1){
        this.push(i);
    }
   return this;
}

var oneToTwenty = [].toTwenty();

console.log(oneToTwenty); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

但我认为这不是一个好主意。更改本机JavaScript类型可能会干扰其他库如何期望JavaScript的行为,如果这是一个很受欢迎的事情,库和代码将不断覆盖自己。只需构建自己的列表类型,使用数组并保留数组本身。仅仅因为你能做到并不意味着你应该这样做。