Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поиск совпадений по параметрам объекта в массиве. (https://javascript.ru/forum/misc/76544-poisk-sovpadenijj-po-parametram-obekta-v-massive.html)

Замар 21.01.2019 13:14

Поиск совпадений по параметрам объекта в массиве.
 
Здравствуйте. Возникла непредвиденная ситуация. Надо написать функцию, которая перебирает массив объектов, ищет совпадения textarea.value с определенным параметром всех объектов в массиве и возвращает новый, отфильтрованный, массив объектов.
Я почти решил эту задачу. Не могу понять, то ли метод push не работает, то ли я в корне делаю все не правильно.
let textarea = document.getElementById("textarea");
let list = [{name:"Вася",age:"23"},
{name:"Игорь", age:”25"}];
function filter(text, parameter){

let a = [];

for(let v of list){
if(v[parameter].indexOf(text) != -1)
a.push(v);
}

return a;
}

 let b = filter(textarea.value, "name");

Aetae 21.01.2019 13:23

3: ” -> "
9: indexOf(s) -> .indexOf(text)

j0hnik 21.01.2019 13:35

function filter(list, text, parameter) {
  return list.filter(el=>el[parameter].includes(text));
}

let b = filter(list ,textarea, "age");

Замар 21.01.2019 14:13

Он дает пустой массив.

SuperZen 21.01.2019 14:30

<textarea id="textarea"></textarea>
<div id="found"></div>
<script>
  let data = [
    { name: "Вася", age: "23" },
    { name: "Игорь", age: "25" }
  ];

  let textarea = document.getElementById('textarea')
  let found = document.getElementById('found')
  let filter = (fields, value) => data.filter(item => fields.some(field => item[field].includes(value)))

  textarea.addEventListener('input', (e) => found.innerText = JSON.stringify(filter(['age', 'name'], e.target.value)))
</script>

Dilettante_Pro 21.01.2019 14:34

Цитата:

Сообщение от Замар
Он дает пустой массив.

???


<input type="text" id = "textarea" value = "Игорь">
<script>
let textarea = document.getElementById("textarea");
let list = [{name:"Вася",age:"23"},
{name:"Игорь", age:"25"}];
function filter(text, parameter){

let a = [];

for(let v of list){
if(v[parameter].indexOf(text) != -1)
a.push(v);
}

return a;
}

 let b = filter(textarea.value, "name");
alert(JSON.stringify(b));
</script>


<input type="text" id = "textarea" value = "Игорь">
<script>
let textarea = document.getElementById("textarea");
let list = [{name:"Вася",age:"23"},
{name:"Игорь", age:"25"}];
function filter(list, text, parameter) {
  return list.filter(el=>el[parameter].includes(text));
}

let b = filter(list ,textarea.value, "name");
alert(JSON.stringify(b));
</script>


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