Использовать массив в качестве аргумента в функции

Я немного новичок в программировании, и у меня есть такая функция:

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?

Большое спасибо!

Array#filter подошло бы лучше.
Nina Scholz 23.06.2018 22:24
const filterJSON = (json, key, value) => json.filter(val => val[key] === value);
Alnitak 23.06.2018 22:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Давайте разберемся с этим:

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, который был описан здесь.

Другие вопросы по теме