Как решить задачу на JS?
Не могу решить задачу помогите пожалуйста.
Напишите функцию get, которая получает объект и путь к вложенному свойству объекта и возвращает значение этого свойства (или undefined, если свойства не существует). Третий, опциональный аргумент функции — значение по умолчанию, которое возвращается, если значения по указанному пути не существует.
function get(obj, path, defaultValue) {
// your code here
}
const obj = {
a: {
b: {
c: 'd'
},
e: 'f'
}
};
get(obj, 'a.b'); // { c : 'd' }
get(obj, 'a.b.c'); // 'd'
get(obj, 'a.e'); // 'f'
get(obj, 'a.x.e'); // undefined
get(obj, 'a.x.e', true); // true
get(obj, 'a.x.e', 'My default value'); // My default value
Ответы (2 шт):
ну алгоритм простой
- надо разбить строку с путём на элементы по разделителю
.
для этого нужно использовать метод split('.'),
например 'a.b.c.d'.split('.') создаст массив ['a', 'b', 'c', 'd']
далее перебираете все элементы данного массива с помощью цикла
for (index of arr)и итерационно двигаетесь по вашему объекту
current = current[index]если ключа не существует - вернется
undefinedи вы вернете значение по умолчанию
в общем всего кода строчек на 5
get довольно прост. set сложнее)
в get есть только одна сложность, но вам она не нужна - возможность экранирования '.'
function get(obj, path, defaultValue) {
const parts = path.split('.');
let res = obj;
for (const part of parts) {
res = res ? res[part] : undefined;
}
return res === undefined ? defaultValue : res;
}
const obj = {
a: {
b: {
c: 'd'
},
e: 'f',
z: false,
}
};
console.log(
get(obj, 'a.b'), // { c : 'd' }
get(obj, 'a.b.c'), // 'd'
get(obj, 'a.e'), // 'f'
get(obj, 'a.x.e'), // undefined
get(obj, 'a.z'), // false
get(obj, 'a.x.e', true), // true
get(obj, 'a.x.e', 'My default value')
)