【JS】2개의 배열 각각의 값끼리를 indexOf로 검색하고 싶지만 방법을 모른다【작업 로그】
이 기사에 대하여
이 기사는 어떤 문제를 해결하기위한 것이 아닙니다.
하고 싶은 일
Chrome 개발자 도구에서 입력란 ( input[type="text"]
)의 일부 값을 변경하고 싶습니다.
구체적으로
Chrome 개발자 도구에서 입력란 (
input[type="text"]
)의 일부 값을 변경하고 싶습니다.구체적으로
실행 환경
실제로 작성한 코드
Console에서 실행하는 JavaScript는 이렇게 썼다. (실제는 의도대로 움직이지 않기 때문에, 이하는 올바르지 않습니다만…)
forEach
로 루프 시킨다두 개의 배열을 각각 스캔하고 값을 비교하고 그에 따라 A 또는 B를 처리하고 싶습니다.
const lastMonth = '0201';
const thisMonth = '0301';
((...files) => {
$$('input[type="text"]').forEach((el) => {
for(let i = 0; files.length > i; i++) {
if(((el.value).indexOf(files[i]) != -1)) {
// 引数に指定した文字列が含まれていたら何もしない
return;
} else {
el.value = (el.value).replace(lastMonth, thisMonth);
}
}
})
})('131', '221');
아래 HTML에 대해 위의 JavaScript를 실행합니다.
index.html
<table>
<caption>テストテーブル</caption>
<thead>
<tr>
<th>項目名</th>
<th>入力欄</th>
</tr>
</thead>
<tbody>
<tr>
<td>テスト</td>
<td><input type='text' value='入力テスト'></td>
</tr>
<tr>
<td>名前</td>
<td><input type='text' value='2021/111_20210101.pdf'></td>
</tr>
<tr>
<td>身長</td>
<td><input type='text' value='2021/121_20210101.pdf'></td>
</tr>
<tr>
<td>年齢</td>
<td><input type='text' value='2021/131_20210201.pdf'></td>
</tr>
<tr>
<td>好きなもの</td>
<td><input type='text' value='2021/211_20210201.pdf'></td>
</tr>
<tr>
<td>よく行くカフェ</td>
<td><input type='text' value='2021/221_20210201.pdf'></td>
</tr>
</tbody>
</table>
실제 결과
예상했던 결과
인수로 지정한 문자가 포함된 입력란은 모두 치환 대상에 들어가지 않는다
예상대로 가지 않는 원인
우선 이번에 나오는 배열 2개를 다음 이름으로 대체
- 입력란의 배열: A
- 인수로 지정된 문자 배열: B
앞의 코드에서 검사 부분은 다음과 같은 동작이됩니다.
A 배열의 값에 포함되는 문자가 B 배열에 있어도, 순차적으로 치환이 발생한다. 결과적으로 작동하지 않음
잘 작동했지만 함수를 사용하는 방식으로 바꾸고 싶습니다.
아무래도 예상대로 움직이고 싶고 if와 else if를 많이 사용하는 코드를 썼다.
확인하려는 문자 수만큼 elseif를 늘리는 방법 .jsconst inp = $$('input[type="text"]');
const targets = ['131', '221'];
inp.map((el) => {
const val = el.value;
if(val.indexOf(targets[0]) != -1) {
return;
} else if(val.indexOf(targets[1]) != -1) {
return;
}
el.value = val.replace('0201', '0301');
});
이것이라고 상정대로는 되지만, targets
에 값을 늘리면 늘릴수록 else if
도 늘려야 한다. 정례 업무에 사용하는 쓰레기의 코드이기 때문에 더욱 심플하게 하고 싶다…
막혔다.
정리입니다.
"2개의 배열을 각각 주사해, 값을 비교, 그에 따라 A나 B의 처리를 행한다"라고 하는 코드를 쓰고 싶습니다만, 잘 작동하지 않았습니다. 구현 방법을 생각해 내는 미래가 보이지 않기 때문에, 일단 오른 기록을 남기는 의도로 여기에 썼습니다. 억울하다. .
Reference
이 문제에 관하여(【JS】2개의 배열 각각의 값끼리를 indexOf로 검색하고 싶지만 방법을 모른다【작업 로그】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/itsumoonazicode/items/ec211b897829da5d8f4e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const inp = $$('input[type="text"]');
const targets = ['131', '221'];
inp.map((el) => {
const val = el.value;
if(val.indexOf(targets[0]) != -1) {
return;
} else if(val.indexOf(targets[1]) != -1) {
return;
}
el.value = val.replace('0201', '0301');
});
정리입니다.
"2개의 배열을 각각 주사해, 값을 비교, 그에 따라 A나 B의 처리를 행한다"라고 하는 코드를 쓰고 싶습니다만, 잘 작동하지 않았습니다. 구현 방법을 생각해 내는 미래가 보이지 않기 때문에, 일단 오른 기록을 남기는 의도로 여기에 썼습니다. 억울하다. .
Reference
이 문제에 관하여(【JS】2개의 배열 각각의 값끼리를 indexOf로 검색하고 싶지만 방법을 모른다【작업 로그】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/itsumoonazicode/items/ec211b897829da5d8f4e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)