title: How to compare contents of javascript array, but not the order of them?
body: <p>As the title says I want to compare two js arrays in which I only care about the contents being the same, but I don't care about the order of them being the same. So what I would expect is this:</p>
  
  <pre><code>[1, 2, 3, 3] == [1, 2, 3, 3]     // True
  [1, 2, 3, 3] == [1, 3, 2, 3]     // True
  [1, 2, 3, 3] == [1, 2]           // False
  [1, 2, 3, 3] == [1, 2, 3]        // False
  [1, 2, 3, 3] == [1, 2, 3, 3, 3]  // False
  [1, 2, 3, 3] == [1, "2, 3, 3"]      // False
  </code></pre>
  
  <p>Obviously the comparison operator doesn't work. From <a href="https://stackoverflow.com/a/14853974/1650012">this SO answer</a> I got the Array.prototype method below, but that unfortunately also checks if the order is the same.</p>
  
  <p>So does anybody know how I can check if two js arrays contain the same elements, not taking into account the order of the elements? All tips are welcome!</p>
  
  <pre><code>Array.prototype.equals = function (array) {
      // if the other array is a falsy value, return
      if (!array)
          return false;
  
      // compare lengths - can save a lot of time 
      if (this.length != array.length)
          return false;
  
      for (var i = 0, l=this.length; i &lt; l; i++) {
          // Check if we have nested arrays
          if (this[i] instanceof Array &amp;&amp; array[i] instanceof Array) {
              // recurse into the nested arrays
              if (!this[i].equals(array[i]))
                  return false;       
          }           
          else if (this[i] != array[i]) { 
              // Warning - two different object instances will never be equal: {x:20} != {x:20}
              return false;   
          }           
      }       
      return true;
  }   
  </code></pre>