https://codesandbox.io/embed/cool-golick-vdf6k?fontsize=14&hidenavigation=1&previewwindow=tests&theme=dark
Массив array.reduce - ваш лучший выбор здесь. Реализация Basi c в вашем случае будет
function serializer(obj) {
return Object.entries(obj).reduce((obj, [key, entry]) => ({
...obj,
[key.substr(1)]: entry
}),{});
}
Однако у вас есть дополнительная проверка для массива, поэтому нам нужно изменить метод так, чтобы он принимал пользовательский модификатор
function serializer(obj, modifier) {
return Object.entries(obj).reduce(
(obj, [key, entry]) => ({
...obj,
[modifier(key, entry)]: entry
}),
{}
);
}
и использовал его как
const myObj = {
$a: "hello a",
$b: "hello b",
$c: [],
$d: "hello d",
$e: "hello e"
};
function serializer(obj, modifier) {
return Object.entries(obj).reduce(
(obj, [key, entry]) => ({
...obj,
[modifier(key, entry)]: entry
}),
{}
);
}
const serialized = serializer(myObj, (key, entry) =>
Array.isArray(entry) ? key : key.substr(1)
);
test("", () => {
expect(serialized).toEqual({
a: "hello a",
b: "hello b",
$c: [],
d: "hello d",
e: "hello e"
});
});