Почему?
Есть много способов проверить, есть ли у кого-то опыт работы с 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. Надеюсь, вам тоже понравится и вы чему-то научитесь!