所以我在最后一次测试时遇到错误:"断言失败:",应该生成一个全新的数组,而不是修改输入数组。
我以为我正在创建一个新阵列,但我不确定测试的内容。是说我需要创建一个新的空数组,然后将正确的值推送到新数组中?我不知道我现在这样做的方式有什么问题,但它似乎要我做其他事情。
_.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)
})
})
答案 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;
}