TDD并重新创建下划线功能

时间:2015-08-05 21:05:26

标签: javascript tdd

所以我在最后一次测试时遇到错误:"断言失败:",应该生成一个全新的数组,而不是修改输入数组。

我以为我正在创建一个新阵列,但我不确定测试的内容。是说我需要创建一个新的空数组,然后将正确的值推送到新数组中?我不知道我现在这样做的方式有什么问题,但它似乎要我做其他事情。

_.uniq = function(array) {
    var newArray = array;
    _.each(newArray, function(val,i){
        for(var j = 0; j < newArray.length; j++)
            if(val === newArray[j] && i !== j){
        array.splice(j,1);
            }
    })
    return newArray;
}

测试:

describe('uniq', function() {
  it('should return all unique values contained in an unsorted array', function() {
    var numbers = [1, 2, 1, 3, 1, 4]

    expect_equal(_.uniq(numbers), [1, 2, 3, 4])
  })

  it('should handle iterators that work with a sorted array', function() {
    var iterator = function(value) { return value + 1 }
    var numbers = [1, 2, 2, 3, 4, 4]

    expect_equal(_.uniq(numbers, true, iterator), [1, 2, 3, 4])
  })

  it('should produce a brand new array instead of modifying the input array', function() {
    var numbers = [1, 2, 1, 3, 1, 4]
    var uniqueNumbers = _.uniq(numbers)

    console.assert(uniqueNumbers !== numbers)
  })
})

1 个答案:

答案 0 :(得分:0)

最终解决了这个问题:

_.uniq = function(array) {
    var newArray = [];
    _.each(array, function(val){
        newArray.push(val); 
    })
    _.each(newArray, function(val,i){

        for(var j = 0; j < newArray.length; j++)
            if(val === newArray[j] && i !== j){
        newArray.splice(j,1);
            }
    })
    return newArray;
}