Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поможите с переделкой кода (https://javascript.ru/forum/misc/82983-pomozhite-s-peredelkojj-koda.html)

Lexx32 20.08.2021 10:32

Поможите с переделкой кода
 
Всем привет, кодю на vb.net, соотв.. js не знаю - только начал учить, срочно понадобился код поиска в текстовой базе, в инете нашел пример функции, но поиск идет только по одному значению, а мне нужно (если введено предложение) чтоб обязательно включало все слова..
Это пример на обычном vb
function test()
dim i,x,col
dim val=document.getElementById('str').value;
var arr = split(val,' ');
for i=0 to ubound(Keyword)
     for x=0 to ubound(arr)
	if instr(keyword(i),arr(x))>0 then
	        col=split(keyword(i),"|")
		nStroka = '<tr><td>'+col(0)+'</td>';
		nStroka = nStroka + '<td>'+col(1)+'</td><td>'+col(2)+'</td><td>'+col(3)+'</td></tr>';
		dlm = dlm + nStroka;	
	end if
     next	
next
  dlm = dlm + '</table>';

Я попытался переделать это так
function test() {
 var val = document.getElementById('str').value;
 var arr = val.split(' ');
 var nStroka ='';
 for(var i = 0; i < Keyword.length; i++) {
	arr.forEach(function(elem) {
	if (Keyword[i].indexOf(elem) !== -1){
		nStroka = '<tr><td>'+col[0]+'</td>';
		nStroka = nStroka + '<td>'+col[1]+'</td><td>'+col[2]+'</td><td>'+col[3]+'</td></tr>';
		dlm = dlm + nStroka;	
	};
	};
  dlm = dlm + '</table>';
  document.getElementById('info1').innerHTML=dlm;
  document.getElementById('info0').innerHTML='   ' + Keyword [0];
 };

Это оригинал функции для поиска одного введенного значения
function test() {
 var val = document.getElementById('str').value;
 var dlm = '';
 var re = new RegExp('\^'+val,'i');
 dlm = '<table border=1 width=90%><th>зн0</th><th>зн1</th><th>зн2</th><th>зн3</th>';
 for(var i = 0; i < Keyword.length; i++) {
 var col = Keyword[i].split('|');
 if (re.test(Keyword[i])) {
 var nStroka ='';
 nStroka = '<tr><td>'+col[0]+'</td>';
 nStroka = nStroka + '<td>'+col[1]+'</td><td>'+col[2]+'</td><td>'+col[3]+'</td></tr>';
 dlm = dlm + nStroka;
 };
 };
 dlm = dlm + '</table>';
 document.getElementById('info1').innerHTML=dlm;
 document.getElementById('info0').innerHTML='   ' + Keyword [0];
 };

Прошу не пинать, только начинаю учить js...
Пожалуйста если не поможете то хотя бы направте что изменить..

Lexx32 20.08.2021 11:05

Людиии пожалуйста поможите уже переделал так, все равно в браузере в отладке ругается на скобку, и ничего не ищет
<script type="text/javascript">
var Keyword=[];
Keyword [0] = "20.08.2021 9:33:19"
Keyword [1] = "Слово 10 | asdsd0 | ddd1ddddddddd | ff1fffffffffff";
Keyword [2] = "Слово 11 | asds1d | ddd2ddddddddd | fff2ffffffffff";
Keyword [3] = "Слово 12 | asds2d | ddd3ddddddddd | ffff3fffffffff";
Keyword [4] = "Слово 13 | asds3d | dddd4dddddddd | fffff4ffffffff";
Keyword [5] = "Слово 14 | asds4d | ddddd5ddddddd | ffffff5fffffff";
Keyword [6] = "Слово 15 | asds5d | dddddd6dddddd | fffffff6ffffff";
Keyword [7] = "Слово 16 | asds6d | ddddddd7ddddd | ffffffff7fffff";
Keyword [8] = "Слово 17 | asds7d | dddddddd8dddd | fffffffff8ffff";
Keyword [9] = "Слово 18 | asds8d | ddddddddd9ddd | ffffffffff9fff";
 
 function test() {
 var val = document.getElementById('str').value;
 var arr = val.split(' ');
 var nStroka ='';
 dlm = '<table border=1 width=90%><th>зн0</th><th>зн1</th><th>зн2</th><th>зн3</th>';
 for(var i = 0; i < Keyword.length; i++) {
	arr.forEach(function(elem) {
	if (Keyword[i].indexOf(elem) !== -1){
		var col = Keyword[i].split('|');
		nStroka = '<tr><td>'+col[0]+'</td>';
		nStroka = nStroka + '<td>'+col[1]+'</td><td>'+col[2]+'</td><td>'+col[3]+'</td></tr>';
		dlm = dlm + nStroka;	
	};
	};
	)};
  dlm = dlm + '</table>';
  document.getElementById('info1').innerHTML=dlm;
  document.getElementById('info0').innerHTML='   ' + Keyword [0];
 };

ksa 20.08.2021 11:14

Цитата:

Сообщение от Lexx32
Людиии пожалуйста поможите

По, приводимым тобой, "примерам" мало чего понятно... Сделай тестовый пример и расскажи что ты хочешь из него получить.

Lexx32 20.08.2021 11:21

Вот код с полем ввода, в которое вводим выражение типа "слово 10"
и мне выходят те позиции в отоых это встречается
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>
</style>
</head>
 <body>
   <script type="text/javascript">
var Keyword=[];
Keyword [0] = "20.08.2021 9:33:19"
Keyword [1] = "Слово 10 | asdsd0 | ddd1ddddddddd | ff1fffffffffff";
Keyword [2] = "Слово 11 | asds1d | ddd2ddddddddd | fff2ffffffffff";
Keyword [3] = "Слово 12 | asds2d | ddd3ddddddddd | ffff3fffffffff";
Keyword [4] = "Слово 10 | asds3d | dddd4dddddddd | fffff4ffffffff";
Keyword [5] = "Слово 14 | asds4d | ddddd5ddddddd | ffffff5fffffff";
Keyword [6] = "Слово 15 | asds5d | dddddd6dddddd | fffffff6ffffff";
Keyword [7] = "Слово 10 | asds6d | ddddddd7ddddd | ffffffff7fffff";
Keyword [8] = "Слово 17 | asds7d | dddddddd8dddd | fffffffff8ffff";
Keyword [9] = "Слово 18 | asds8d | ddddddddd9ddd | ffffffffff9fff";
 
 function test() {
 var val = document.getElementById('str').value;
 var arr = val.split(' ');
 var nStroka ='';
 dlm = '<table border=1 width=90%><th>Наименование</th><th>МНН</th><th>Кол</th><th>Отделение</th>';
 for(var i = 0; i < Keyword.length; i++) {
	arr.forEach(function(elem) {
	if (Keyword[i].indexOf(elem) !== -1){
		var col = Keyword[i].split('|');
		nStroka = '<tr><td>'+col[0]+'</td>';
		nStroka = nStroka + '<td>'+col[1]+'</td><td>'+col[2]+'</td><td>'+col[3]+'</td></tr>';
		dlm = dlm + nStroka;	
	};
	)};
	)};
  dlm = dlm + '</table>';
  document.getElementById('info1').innerHTML=dlm;
  document.getElementById('info0').innerHTML='   ' + Keyword [0];
 };

 
 function test2() {
 var val = document.getElementById('str2').value;
 var dlm = '';
 var re = new RegExp('\^'+val,'i');
 dlm = '<table border=1 width=90%><th>Наименование</th><th>МНН</th><th>Кол</th><th>Отделение</th>';
 for(var i = 0; i < Keyword.length; i++) {
 var col = Keyword[i].split('|');
 if (re.test(col[1])) {
 var nStroka ='';
 nStroka = '<tr><td>'+col[0]+'</td>';
 nStroka = nStroka + '<td>'+col[1]+'</td><td>'+col[2]+'</td><td>'+col[3]+'</td></tr>';
 dlm = dlm + nStroka;
 };
 };
 dlm = dlm + '</table>';
 document.getElementById('info1').innerHTML=dlm;
 document.getElementById('info0').innerHTML='   ' + Keyword [0];
 };
   
   </script>

<table>
	<tr>
	<td>По торговому наименованию</td>
	<td>
		<form onsubmit='test(); return false;'>
		<input type='text' id='str' value='' />
		</form> 
	</td>
	</tr>
</table>

</center>


<div id='info0'>Актуальность </div>
    <div id='info1'>
      <table border=1 width=90%>
<th>зн0</th><th>зн1</th><th>зн2</th><th>зн3</th></table>
</div>


    </body>
</html>

рони 20.08.2021 11:22

Lexx32,
может минимальный макет? пока не очень понятно, где ищем, что ищем, куда выводим и в каком виде?

Lexx32 20.08.2021 11:22

Цитата:

Сообщение от Lexx32 (Сообщение 539542)
Вот код с полем ввода, в которое вводим выражение типа "слово 10"
и мне выходят те позиции в отоых это встречается
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>
</style>
</head>
 <body>
   <script type="text/javascript">
var Keyword=[];
Keyword [0] = "20.08.2021 9:33:19"
Keyword [1] = "Слово 10 | asdsd0 | ddd1ddddddddd | ff1fffffffffff";
Keyword [2] = "Слово 11 | asds1d | ddd2ddddddddd | fff2ffffffffff";
Keyword [3] = "Слово 12 | asds2d | ddd3ddddddddd | ffff3fffffffff";
Keyword [4] = "Слово 10 | asds3d | dddd4dddddddd | fffff4ffffffff";
Keyword [5] = "Слово 14 | asds4d | ddddd5ddddddd | ffffff5fffffff";
Keyword [6] = "Слово 15 | asds5d | dddddd6dddddd | fffffff6ffffff";
Keyword [7] = "Слово 10 | asds6d | ddddddd7ddddd | ffffffff7fffff";
Keyword [8] = "Слово 17 | asds7d | dddddddd8dddd | fffffffff8ffff";
Keyword [9] = "Слово 18 | asds8d | ddddddddd9ddd | ffffffffff9fff";
 
 function test() {
 var val = document.getElementById('str').value;
 var arr = val.split(' ');
 var nStroka ='';
 dlm = '<table border=1 width=90%><th>Наименование</th><th>МНН</th><th>Кол</th><th>Отделение</th>';
 for(var i = 0; i < Keyword.length; i++) {
	arr.forEach(function(elem) {
	if (Keyword[i].indexOf(elem) !== -1){
		var col = Keyword[i].split('|');
		nStroka = '<tr><td>'+col[0]+'</td>';
		nStroka = nStroka + '<td>'+col[1]+'</td><td>'+col[2]+'</td><td>'+col[3]+'</td></tr>';
		dlm = dlm + nStroka;	
	};
	)};
	)};
  dlm = dlm + '</table>';
  document.getElementById('info1').innerHTML=dlm;
  document.getElementById('info0').innerHTML='   ' + Keyword [0];
 };

 
 function test2() {
 var val = document.getElementById('str2').value;
 var dlm = '';
 var re = new RegExp('\^'+val,'i');
 dlm = '<table border=1 width=90%><th>Наименование</th><th>МНН</th><th>Кол</th><th>Отделение</th>';
 for(var i = 0; i < Keyword.length; i++) {
 var col = Keyword[i].split('|');
 if (re.test(col[1])) {
 var nStroka ='';
 nStroka = '<tr><td>'+col[0]+'</td>';
 nStroka = nStroka + '<td>'+col[1]+'</td><td>'+col[2]+'</td><td>'+col[3]+'</td></tr>';
 dlm = dlm + nStroka;
 };
 };
 dlm = dlm + '</table>';
 document.getElementById('info1').innerHTML=dlm;
 document.getElementById('info0').innerHTML='   ' + Keyword [0];
 };
   
   </script>

<table>
	<tr>
	<td>По торговому наименованию</td>
	<td>
		<form onsubmit='test(); return false;'>
		<input type='text' id='str' value='' />
		</form> 
	</td>
	</tr>
</table>

</center>


<div id='info0'>Актуальность </div>
    <div id='info1'>
      <table border=1 width=90%>
<th>зн0</th><th>зн1</th><th>зн2</th><th>зн3</th></table>
</div>


    </body>
</html>

выше указанная функция искала только одно слово, мне нужно 2,3 короче сколько введет пользователь

рони 20.08.2021 11:52

Lexx32,
фразы писать через |
<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <style>
    </style>
</head>

<body>
    <script type="text/javascript">
        var Keyword = [];
        Keyword[0] = "20.08.2021 9:33:19"
        Keyword[1] = "Слово 10 | asdsd0 | ddd1ddddddddd | ff1fffffffffff";
        Keyword[2] = "Слово 11 | asds1d | ddd2ddddddddd | fff2ffffffffff";
        Keyword[3] = "Слово 12 | asds2d | ddd3ddddddddd | ffff3fffffffff";
        Keyword[4] = "Слово 10 | asds3d | dddd4dddddddd | fffff4ffffffff";
        Keyword[5] = "Слово 14 | asds4d | ddddd5ddddddd | ffffff5fffffff";
        Keyword[6] = "Слово 15 | asds5d | dddddd6dddddd | fffffff6ffffff";
        Keyword[7] = "Слово 10 | asds6d | ddddddd7ddddd | ffffffff7fffff";
        Keyword[8] = "Слово 17 | asds7d | dddddddd8dddd | fffffffff8ffff";
        Keyword[9] = "Слово 18 | asds8d | ddddddddd9ddd | ffffffffff9fff";

        function test() {
            var val = document.getElementById('str').value;
            var arr = val.trim().split('|');
            var table = '<table border=1 width=90%><tr><th>Наименование</th><th>МНН</th><th>Кол</th><th>Отделение</th>';
            for (var i = 0; i < Keyword.length; i++) {
                arr.forEach(function(elem) {
                    if (Keyword[i].indexOf(elem) !== -1) {
                        var col = Keyword[i].split('|');
                        col = col.map(text => `<td>${text}</td>`).join('');
                        table += `<tr>${col}`; 
                    };
                })};
                table += '</table>';
                document.getElementById('info1').innerHTML = table;
                document.getElementById('info0').innerHTML = '   ' + Keyword[0];
        };
    </script>
    <table>
        <tr>
            <td>По торговому наименованию</td>
            <td>
                <form onsubmit='test(); return false;'>
                    <input type='text' id='str' value='Слово 10|Слово 15' />
                </form>
            </td>
        </tr>
    </table>
    </center>
    <div id='info0'>Актуальность </div>
    <div id='info1'>
        <table border=1 width=90%>
            <th>зн0</th>
            <th>зн1</th>
            <th>зн2</th>
            <th>зн3</th>
        </table>
    </div>
</body>

</html>

ksa 20.08.2021 11:53

Цитата:

Сообщение от Lexx32
Вот код с полем ввода, в которое вводим выражение типа "слово 10"
и мне выходят те позиции в отоых это встречается

Как вариант...
const arr=[];
arr[0] = "20.08.2021 9:33:19"
arr[1] = "Слово 10 | asdsd0 | ddd1ddddddddd | ff1fffffffffff";
arr[2] = "Слово 11 | asds1d | ddd2ddddddddd | fff2ffffffffff";
arr[3] = "Слово 12 | asds2d | ddd3ddddddddd | ffff3fffffffff";
arr[4] = "Слово 10 | asds3d | dddd4dddddddd | fffff4ffffffff";
arr[5] = "Слово 14 | asds4d | ddddd5ddddddd | ffffff5fffffff";
arr[6] = "Слово 15 | asds5d | dddddd6dddddd | fffffff6ffffff";
arr[7] = "Слово 10 | asds6d | ddddddd7ddddd | ffffffff7fffff";
arr[8] = "Слово 17 | asds7d | dddddddd8dddd | fffffffff8ffff";
arr[9] = "Слово 18 | asds8d | ddddddddd9ddd | ffffffffff9fff";
let val = 'Слово 10, Слово 17'
val = val.replace(/,\s?/, '|')
val = new RegExp(val)
const res = arr.filter(el => val.test(el))
alert(res.join('\n'))

Lexx32 20.08.2021 13:20

Да, в твоем примере ищется, но у меня немного другая задача, нужно еще выводить в таблицу, переделал так, вообще перестало искать...
function test() {
	let val = document.getElementById('str').value;
	val = val.replace(/,\s?/, '|')
	val = new RegExp(val)
	const res = Keyword.filter(el => val.test(el))
	let mas = res.join('\n');
	for(var i = 0; i < mas.length; i++) {
		var col = mas[i].split('|');
		nStroka = '<tr><td>'+col[0]+'</td>';
		nStroka = nStroka + '<td>'+col[1]+'</td><td>'+col[2]+'</td><td>'+col[3]+'</td></tr>';
		dlm = dlm + nStroka;	
	};
	dlm = dlm + '</table>';
	document.getElementById('info1').innerHTML=dlm;
	document.getElementById('info0').innerHTML='   ' + Keyword [0];
 };

Lexx32 20.08.2021 13:22

У меня почему то массив res, mas в отладчике пустые


Часовой пояс GMT +3, время: 15:09.