글자와 색상이 포함 된 배열이 있습니다. 색상 문자의 원래 매핑을 유지하면서배열과 문자열의 병합 문제
const s = 'hey, howdy there';
:
const a = [
{char: 'h', color: 'red'},
{char: 'e', color: 'red'},
{char: 'y', color: 'red'},
{char: ' ', color: 'green'},
{char: 't', color: 'red'},
{char: 'h', color: 'red'},
{char: 'e', color: 'red'},
{char: 'r', color: 'red'},
{char: 'e', color: 'red'}
];
나는 문자열로이 병합 함수를 작성하려고합니다. 예를 들어, hey
및 there
을 구성하는 문자는 원래 배열 A에 그려진 것처럼 모두 여전히 빨간색이고 은 녹색이어야하며 새 문자는 임의의 것으로 기본 설정되지만 노란색으로 말하면 이전 문자가 삭제됩니다.
res = [
{char: 'h', color: 'red'},
{char: 'e', color: 'red'},
{char: 'y', color: 'red'},
{char: ',', color: 'yellow'},
{char: ' ', color: 'green'},
{char: 'h', color: 'yellow'},
{char: 'o', color: 'yellow'},
{char: 'w', color: 'yellow'},
{char: 'd', color: 'yellow'},
{char: 'y', color: 'yellow'},
{char: ' ', color: 'yellow'},
{char: 't', color: 'red'},
{char: 'h', color: 'red'},
{char: 'e', color: 'red'},
{char: 'r', color: 'red'},
{char: 'e', color: 'red'}
];
한 가지 방법은 당신이 단어의 배열을 가지고 있으므로, const a
에서 문자를 추출 공간에 문자열 및 분할로 가입 할 수 있습니다 : 그래서,이 함수의 출력은 나에게 뭔가를 줄 것이다. 문자열 s로 반복하십시오. 새로운 배열의 문자열 s를 원래의 배열과의 불일치가 생길 때까지 반복하십시오. 그 문자는 ,
에 발생합니다.
여기서 어떻게 진행해야할지 모르겠습니다. 두 단어 만있는 간단한 경우에는 첫 번째 단어를 유지하고 다른 모든 단어를 문자열 s split의 새 단어로 바꿀 수 있습니다. 그러나 제공 한 경우 이전 배열 (there
)의 값을 유지하면서 새 문자열 (예 : , howdy
)에 값을 추가합니다.
git이 텍스트를 diff하는 데 사용하는 알고리즘은 여기에서 작동하지만 상상해보십시오. 그러나 정확히 어떻게 복제하는지 또는이 사용 사례에서 효율적 일지는 모르겠습니다.
편집 : 일부 내용이 일치하지 않아 약간 수정되었습니다.
두 문자열 간의 편집 차이를 확인하는 방법을 연구해야한다고 생각합니다. 그건', howdy'가 삽입되었다는 것을 알려주고, 노란색으로 표시 할 수 있습니다. – Barmar
나는 당신이 무슨 일을하는지 잘 모르겠다. 질문은 배열'const a'를 "매핑"이라고 부릅니다. 그러나 배열로서, 그것은 순서를 유지하기 때문에 매핑 이상의 것입니다. 그것은 또한 'hey'의 'e'와 'there'의 'e'와 같은 중복 된 문자를 포함합니다. 귀하의 예에서 이러한 키의 값은 같지만 때로는 다를 수 있습니까? 진정한 매핑은'{h : "red", e : "red"...}와 같이 보이며 순서는없고 중복 키는 없을 것입니다. 이것을 입출력으로 처리하는 알고리즘은 매우 간단합니다. 너가 원하는게 그거야? – danh
@Barmar 편집상의 차이점은 내가 찾고있는 것이지만 설명 할 어휘가 없다. 나는 연구를했고 myer의 diff 알고리즘은 내가 필요로하는 것이다. 팁 고마워! – nmac