2015-05-19 2 views
2

Я работаю над упражнением по изучению JavaScript и не могу понять, почему мой код терпит оценку теста. И да, я понимаю, что я избыточно (и беспорядочно) переопределяет Underscore.js _.last. Это и есть цель упражнения.Работа с JavaScript array.slice()

_.last = function(array, n) { 
    if (n === 0) { 
    return []; 
    } 
    else { 
    return n === undefined ? array.slice(-1) : array.slice(-n); 
    }; 
}' 

Эти результаты я получаю при запуске:

_.last([1,2,3], 2) 
[2, 3] 
_.last([1,2,3], 5) 
[1, 2, 3] 
_.last([1,2,3], 0) 
[] 
_.last([1,2,3]) 
[3] 

Самый последний вызов _.last ([1,2,3]) является один недостаток этой оценки:

expect(_.last([1,2,3])).to.equal(3) 

Может ли кто-нибудь сказать, почему этот ожидание возвращает false? Что я не замечаю

Спасибо заранее.

EDIT: решена. еще отредактирован, чтобы вернуть значение, если не определено п === вместо того, чтобы возвращать массив одного значения:

return n === undefined ? array[array.length-1] : array.slice(-n); 
+0

Так вы ожидаете его вернуть '3', но получить массив с входом 3. И.Д. '[3]'? – janfoeh

+2

Я собираюсь предположить, что это потому, что '[3]! == 3' –

+0

А, хорошо, это имеет смысл. Я действительно задавался вопросом, может ли это быть так. Спасибо :) –

ответ

1

Array.prototype.slice возвращает массив. И если вы сравните массив и число, они будут разными.

Вместо этого следует делать то же подчеркивание does:

if (n == null /*|| guard*/) return array[array.length - 1]; 
+0

Это сработало отлично! Я проверил документы подчеркивания и * || охранник * меня отбрасывал. Благодаря! –

+0

Кроме того, вы и @taxicala ответили слишком быстро. Я не могу отметить это как решение еще на 4 минуты. :П –

0

Цитирование Описание array.slice:

Метод среза() возвращает выбранные элементы массив, как новый объект массива .

В принципе, ваш код хорошо, и ваш тест не является:

Вы должны изменить:

expect(_.last([1,2,3])).to.equal(3) 

к:

expect(_.last([1,2,3])).to.equal([3]) 

Подробнее здесь http://www.w3schools.com/jsref/jsref_slice_array.asp

+0

Круто, спасибо. Я начинал думать, что сошел с ума! –

Смежные вопросы