isPalindrom

Проверить, является ли массив палиндромом (при обходе с любого конца порядок элементов один и тот же)

by l_gordienkova

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.4.5/mocha.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/3.5.0/chai.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.4.5/mocha.min.css">
<div id="mocha">
</div>
<script>
  mocha.setup('bdd');
  var assert = chai.assert;
  var expect = chai.expect;
</script>
<script>

  describe("rotate", function() {
    before(function () {
      chai.config.includeStack = false;
    });
    describe('формат', function(){
      it("объявлена", function() {
        assert.isFunction(window.isPalindrom);
      });
      it("принимает 1 аргумент", function() {
        assert.equal(isPalindrom.length, 1);
      });
    });
    describe('проверки', function(){
    	function suite(name, input, expected){
      	it(name, function(){
        	assert.equal(isPalindrom(input), expected);
        })
      }
      suite('пустой массив', [], true);
    	suite('А роза упала на лапу Азора', 'арозаупаланалапуазора'.split(''), true);
      suite('Аргентина манит негра', 'аргентинаманитнегра'.split(''), true);
      suite('четная длина, ок', [1,3,6,6,3,1], true);
      suite('нечетная длина, ок', [1,3,6,-5,6,3,1], true);
      suite('четная длина, не ок', [1,3,6,1,3,6], false);
      suite('нечетная длина, не ок', [1,3,6,1,3,6,1], false);
      suite('ловушка на идентичность', [1,3,6,6,"3","1"], false);
      suite('ловушка с NaN', [1,NaN,6,6,NaN,1], true);
    });
  });
  mocha.run();
</script>

JavaScript

function isPalindrom(array){
 var str='';
 for(i=0;i<array.length;i++){
 		if(typeof array[0] != typeof array[i]) return false;
     str+=array[i];
 }
  var revstr='';
 for(i=array.length-1;i>=0;i--){
     revstr+=array[i];
 }
 if (str !== revstr) return false;
 return true;
 }