요구사항 설명: 배열 집합에서 서로 다른 순서로 배열된 문자열 집합의 배열 요소를 찾습니다. 다음과 같은 배열이 있다고 가정해 보겠습니다.
[ '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에서 사용된 정렬은 암시적으로 변환됩니다.