>  기사  >  웹 프론트엔드  >  JavaScript는 array_javascript 팁에서 다른 순서로 배열된 문자열 찾기를 구현합니다.

JavaScript는 array_javascript 팁에서 다른 순서로 배열된 문자열 찾기를 구현합니다.

WBOY
WBOY원래의
2016-05-16 16:35:151246검색

요구사항 설명: 배열 집합에서 서로 다른 순서로 배열된 문자열 집합의 배열 요소를 찾습니다. 다음과 같은 배열이 있다고 가정해 보겠습니다.

코드 복사 코드는 다음과 같습니다.

[ 'abcd', 'hello', 'bdca', 'olleh', 'cadb', 'nba', 'abn', 'abc' ]

찾을 결과는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

[ 'abcd', 'bdca', 'cadb' ]

여기서 핵심은 문자열 집합에 문자 순서만 다른지 여부를 확인하는 것입니다. 전체 핵심 사항이 해결되면 다른 모든 것은 쉽게 처리할 수 있습니다.

방법 1:

코드 복사 코드는 다음과 같습니다.

var stringClassify = 함수( arr ){
var arrLength = arr.length,
         obj = {},
나는 = 0,
숫자, 항목, 이름, firstItem, strLength;

for( ; i 항목 = arr[i];
         strLength = item.length;
         숫자 = 0;

                        // 단일 문자를 유니코드 인코딩으로 변환
// 코드 합 계산
for( j = 0; j               num = item.charCodeAt( j );
                                                          
If( !firstItem ){
                1stItem = 아이템;
               obj[num].push(item);
}
// 추가할 문자열의 첫 번째 문자가
인지 확인합니다. // 다음 상황을 피하기 위해 다른 문자열에 나타납니다
// ['ad', 'da', 'bc']
           else if( ~firstItem.indexOf(item.charAt(0)) ){
               obj[num].push(item);
}
}

for( obj의 이름 ){
console.log( obj[이름] );
}
};

방법 1은 문자열의 각 문자를 순회한 다음 단일 문자를 유니코드 인코딩으로 변환하고 인코딩 합계를 계산합니다. abcd와 bdca의 인코딩 합계는 일관됩니다. 마지막으로 인코딩과 키를 객체로 사용하여 인코딩과 일관된 문자열을 저장합니다.

방법 1 문자열 "ad"와 "bc"의 유니코드 인코딩이 동일하다는 점에 유의해야 합니다. 이때 어떤 문자열의 첫 번째 문자가 다른 문자열에 나타나는지 여부를 감지하기 위한 추가 판단이 필요합니다. . 문자열로만 나타나야 합니다.

방법 2:

코드 복사 코드는 다음과 같습니다.

var stringClassify = 함수(){
var arrLength = arr.length,
         obj = {},
나는 = 0,
숫자, 항목, 이름, strArr, newStr;

for( ; i 항목 = arr[i];

         strArr = arr[i].split( '' );
        strArr.sort();
newStr = strArr.join( '' );

If( !obj[newStr] ){
                obj[ newStr ] = [];
}

          obj[ newStr ].push( 항목 );
}

for( obj의 이름 ){
console.log( obj[이름] );
}
};

방법 2는 문자열을 배열로 변환한 후 배열을 정렬하는 것입니다. 정렬 후 bdca는 정렬된 문자열을 객체의 키로 사용하여 동일한 정렬로 문자열을 저장합니다.

실제로 두 방법 모두 문자를 유니코드 인코딩으로 변환하는 것이 원칙이지만 방법 1은 명시적 변환인 반면 방법 2에서 사용된 정렬은 암시적으로 변환됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.