2015-01-04 2 views
0

В основном то, что я пытаюсь сделать, это найти строку в моем массивеКак проверить, содержит ли массив строку в другом порядке?

Раньше мой код:

var arr1 = ['23456', '34567', '45678', '56789', '6789T', '789TJ', '89TJQ', '9TJQK', 'TJQKA']; 
var arr2 = ['98TJQ']; 
var arr3 = ['89TJQ']; 

if (!('containsU' in Array.prototype)) 
    Array.prototype.containsU = function(arr, startIndex) { 
     for (i in arr) { 
      if (arr.hasOwnProperty(i) && ''.indexOf.call(this, arr[i], startIndex) === -1) return false; 
     } 
     return true; 
    }; 
if (!('containsArrayU' in Array.prototype)) //contains array unordered 
    Array.prototype.containsArrayU = function(arr, startIndex) { 
    for (i in this) { 
     if (this.hasOwnProperty(i) && arr.containsU(this[i])) return true; 
    } 
    return false; 
}; 

Ищу для любого элемента arr1, который является частью arr2 или arr3, пример:

arr1 = ['222','333','444','555','666','777','888','999','TTT','JJJ','QQQ','KKK','AAA']; 
arr2 = ['9229']; 
arr3 = ['9299']; 
alert(arr2.containsArrayU(arr1)); //this should be false 
alert(arr3.containsArrayU(arr1)); //this should be true (contains '999') 
+0

Почему вы используете 'hasownProperty' в массиве? – charlietfl

+0

Непонятно, что вы пытаетесь сделать – thefourtheye

+0

, потому что это дает мне ошибки, когда я повторяю прототипы – shuji

ответ

0

Хорошо, я думаю, что я решил ее:

var arr1 = ['23456','34567','45678','56789','6789T','789TJ','89TJQ','9TJQK','TJQKA']; 
var arr2 = '98TJQ'; 
var arr3 = '89TJQ'; 

if (!('removeAt' in String.prototype)) 
    String.prototype.removeAt = function(index) { return this.slice(0, index) + this.slice(index+1); }; 
if (!('containsU' in String.prototype)) //string contains each element of another string 
    String.prototype.containsU = function(str, startIndex) { 
     var newString = this; 
     for(i in str) { 
      if(str.hasOwnProperty(i)) { 
       var index = newString.indexOf(str[i]); 
       if (index===-1) return false; 
       newString = newString.removeAt(index); 
      } 
     } return true; 
    } 
if (!('containsArrayU' in String.prototype)) //contains some element in array 
    String.prototype.containsArrayU = function(arr, startIndex) { 
     for(i in arr) { if(arr.hasOwnProperty(i) && this.containsU(arr[i])) return true; } return false; }; 

alert(arr2.containsArrayU(arr1)); 
alert(arr3.containsArrayU(arr1)); 

arr1 = ['222','333','444','555','666','777','888','999','TTT','JJJ','QQQ','KKK','AAA']; 
arr2 = '9229'; 
arr3 = '92422'; 
alert('9299'.containsU('999')); 
alert(arr2.containsArrayU(arr1)); //this should be false 
alert(arr3.containsArrayU(arr1)); //this should be true 

jsfiddle.net

Все, что я сделал, это изменить arr2 и arr3 на формат каждого элемента в arr1 (строка, это, вероятно, можно легко перевести в массивы).

Чтобы искать повторяющиеся числа в строке, я создал временную и удалил уже найденные символы.

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