Создание объектов, метод forEach для JSON

129
15 января 2021, 14:00

Что происходит в функции(person), можете написать по порядку?

Как происходит поиск имени? то что forEach проходит по каждому элементу понятно, но непонятно что происходит в этих строчках:

byName[person.name] = person;
...
console.log(byName["Philibert Haverbeke"]);

var ANCESTRY_FILE = JSON.stringify([
  { "name": "Carolus Haverbeke", "born": 1832 },
  { "name": "Emma de Milliano", "born": 1876 },
  { "name": "Philibert Haverbeke", "born": 1907 },
]);
var ancestry = JSON.parse(ANCESTRY_FILE);
console.log(ancestry.length);
var byName = {};
ancestry.forEach(function(person) {
  byName[person.name] = person;
});
console.log(byName["Philibert Haverbeke"]); // → {name: "Philibert Haverbeke", …}

Answer 1

Это называется Скобочная нотация

Любое значение объекта можно получить через объект["название_ключа"], или присвоить ему объект["название_ключа"] = "Новое значение"; Вместо строки - внутри квадратных скобок может быть переменная или любое другое выражение.

Но когда ключ - обычная строка без пробелов или специальных символов, используют "точку", просто потому что так короче.

let test = {
  "one_one": "1111",
  "two two": "2222",
  "#@$@#%$": "3333",
};
console.log( test.one_one );    // "1111"
console.log( test["one_one"] ); // "1111"
console.log( test["two two"] ); // "2222"
let key = "#@$@#%$";
console.log( test[key] ); // "3333"
test[key] = "Новое значение";
console.log( test[key] ); // "Новое значение"

document["body"]["style"]["background-color"] = "#922";
// Работает даже так

А в вашем примере, во время перебора, на каждой итерации, person получает значение очередного объекта вида { "name": "Carolus Haverbeke", "born": 1832 }

byName[person.name] = person; — в заранее созданный пустой объект byName = {} добавляются все объекты person, а ключами служат их значения person.name

Answer 2

Простыми словами, создаётся map коллекция с ключом и значением, где в качестве ключа выступает *.name и дальше мы можем просто получить значение из коллекции, обратившись к ней по ключу.

Советую прочесть - MDN Map

READ ALSO
Роут link-to копирует параметры запроса (Ember.js)

Роут link-to копирует параметры запроса (Ember.js)

Например имеется роут groups выводящий соответственно список всех группЕсли у роута есть параметры, например, groups?grouptype=new, то он, например, выводит...

132
Автоматически узнать ширину у canvas

Автоматически узнать ширину у canvas

Есть скрипт, который формирует кнопку canvasВнутри кнопки пишется текст, как узнать ширину текста что бы правильно оцентровать кнопку? Проблема...

107
Отменить действие e.preventDefault();

Отменить действие e.preventDefault();

Есть input checkboxНеобходимо ставить галочку только если была нажата клавиша Shift хотя бы один раз

92
Как правильно setState написать?

Как правильно setState написать?

Не получается изменить значение инпутаКак правильно это сделать?

107