Я немного новичок в программировании, и у меня есть такая функция:
function filterJSON(json, key, value) {
var result = [];
json.forEach(function(val,idx,arr){
if (val[key] == value){
result.push(val)
}
})
Моя проблема в понимании второй части:
json.forEach(function(val,idx,arr){
if (val[key] == value){
result.push(val)
}
})
В этом случае мы получили val в качестве аргумента, а в операторе if мы используем термин val[key]. Значит ли это, что аргумент val является массивом? И в конце мы помещаем весь массив в пустой массив с именем result?
Большое спасибо!
const filterJSON = (json, key, value) => json.filter(val => val[key] === value);


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Давайте разберемся с этим:
json.forEach(function(val,idx,arr){
forEach выполняет функцию. Первый аргумент - это одно из значений повторяемой вещи. Второй и третий аргументы - это текущий индекс и сам массив, которые вам понадобятся, если вы хотите возиться с массивом во время итерации по нему.
В этом случае функция будет получать каждую из вещей, хранящихся в объекте json, по одному.
if (val[key] == value){
val - это объект. val[key] означает «от val получить свойство с именем key».
result.push(val)
Если свойство valkey было равно значению, по которому мы выполняем фильтрацию, мы помещаем объект val в список возвращаемых вещей.
Думаю, путаница в смысле val[key]. Синтаксис [] используется как для индексации в массив (arr[0] получает первое значение в списке), так и для получения свойства объекта (foo[bar] получает foo.bar).
Да, val должен быть массивом, потому что forEach() - это метод массива.
The forEach() method calls a provided function once for each element in an array, in order.
Нет, push() не означает, что весь массив будет помещен в result, а только значение в круглых скобках ().
The push() method adds new items to the end of an array, and returns the new length.
Примечание: также не забудьте использовать === вместо == в JavaScript, который был описан здесь.