Member 13802070 Ответов: 1

Я хотел бы знать, что происходит в линии, которую я выделил жирным шрифтом. Я знаю, что они "работают", но не знаю почему.


Я выполнял упражнение, в котором мне нужно было написать функцию select. Учитывая массив и объект, я должен был вернуть новый объект, свойства которого включали только те, которые были общими для массива и исходного объекта. Например:

var arr = ['a', 'c', 'e'];
var obj = {
  a: 1,
  b: 2,
  c: 3,
  d: 4
};
var output = select(arr, obj);
console.log(output); // --> { a: 1, c: 3 }


Приведенный ниже код "работает", но я пытаюсь понять, как newObject[search] = obj[search] дает правильные результаты в newObject.


function select(arr, obj) {
  var newObject = {};
  var keys = Object.keys(obj);
  for (var i = 0; i < arr.length; i++) {
    var search = arr[i];
      if (keys.indexOf(search) !== - 1) {
        newObject[search] = obj[search];
    }
  }
  return newObject;
}


Что я уже пробовал:

Я несколько раз запускал этот код через отладчик в Google dev tools. Мое лучшее понимание заключается в том, что obj[search] достигает всего пути назад до переменной "keys", чтобы узнать, как она связана с переменной "search".

Искренне благодарю вас за вашу помощь!

1 Ответов

Рейтинг:
1

Jon McKee

function select(arr, obj) {
  var newObject = {};
  var keys = Object.keys(obj);
  for (var i = 0; i < arr.length; i++) {
    var search = arr[i];
    if (keys.indexOf(search) !== - 1) {
      newObject[search] = obj[search];
    }
  }
  return newObject;
}

Что происходит, так это то, что вы устанавливаете переменную, которая содержит все ключи obj параметр - keys Затем вы повторяете через arr проверка параметров каждого элемента (search) находится в keys список (indexOf возвращает -1, если ключ не найден). Если элемент находится в списке, то вы перемещаете его значение из obj в newObject.

Оператор присваивания, приведенный в вашем примере, будет выполнен newObject['a'] = obj['a']; и newObject['c'] = obj['c'];.

То МДН[^] имеет отличное руководство по JS и справочные материалы.