Почему?

Есть много способов проверить, есть ли у кого-то опыт работы с ES6, но я очень ценю, когда интервьюер проверяет меня на реальной проблеме, потому что это позволяет мне заглянуть в то, с чем они имеют дело каждый день, а также позволить им знаю, действительно ли я способен выполнять повседневную работу.

Хорошо, достаточно, давайте перейдем к первой проблеме, которая, как мне кажется, является типичной.

Итак, вам дан следующий массив объектов с именем data (размер может быть больше 3). Вас просят написать функцию, которая будет генерировать объект на основе пары ключ-значение в данных.

const data = [{
      key: 'name',
      value: 'Jenna'
    }, {
      key: 'age',
      value: 21
    }, {
      key: 'from',
      value: 'Grace Hopper'
   }
]

Если это звучит слишком расплывчато для вас, вот пример вывода:

let example_output = {
     name: 'Jenna',
     age: 21,
     from: 'Grace Hopper'
}

Как бы вы сделали это, используя как можно больше характеристик ES6?

Если вы подумали об этом, вы, вероятно, уже придумали что-то вроде этого:

//initiate arrow function => alternative to traditional function expression since there is no limitations here. 
const process = data => {
     
     //initiate an empty object with const
     const processData = {} 
     //initiate i with let
     for (let i = 0; i < data.length; i++) {
            const key = data[i].key;
            const value = data[i].value;
            processData[key] = value;
     }
    return processData;
}

А что, если бы меня попросили сделать объект неизменяемым или доступным только для чтения?

Вы можете подумать: разве const не делает объект неизменным?

«const» на самом деле применяется только к привязкам. Он создает неизменяемую привязку всего объекта, но ключи объектов можно свободно менять. Это означает, что кто-то может прийти и переписать значение объекта: object[key] = ‘new value’ для константного объекта. Таким образом, он не доступен только для чтения.

Так как же сделать объект неизменным?

Подсказка: Object.freeze()

Не стесняйтесь попробовать написать свою функцию, чтобы сделать объект неизменным, прежде чем смотреть ответ.

const read_only = (obj) => {
   Object.freeze(obj);
   // The reason why we need to check each key-value pair is because
      Object.freeze is shallow so It wouldn't freeze the objects
      that lives in the keys of the object
   Object.keys(obj).forEach( (key, i) => {
      if( typeof obj[key] === 'object' ) {
         read_only( obj[key] );
      }
   });
}

Итак, на сегодня все!

Я узнал о разнице между Object.freeze() и const, а также узнал о некоторых других характеристиках ES6. Надеюсь, вам тоже понравится и вы чему-то научитесь!