Избегайте повторения кода во время преобразования данных - PullRequest
1 голос
/ 25 апреля 2019

У меня есть некоторые фиктивные данные, как показано ниже:

data: {
    first: {
        date_2019_01: 10,
        date_2019_02: 15,
        ....
    },
    second: {
        date_2019_01: 30,
        date_2019_02: 35,
        ....
    }
}

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

first: [
    {
        month: 1,
        growth: 10
    },
    {
        month: 2,
        growth: 15
    },
    ...
],
second: [
    {
        month: 1,
        growth: 30
    },
    {

    }
]

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

Пожалуйста, кто-нибудь, помогите мне написать этот кусок кода в лучшем формате.

Спасибо.

let first = data["first"];

let firstMonth = [];
Object.keys(first).map(function(key) {
    firstMonth.push({
        month: key.split('_')[2],
        growth: first[key]
    });
});

let second = data["second"];

let secondMonth = [];
Object.keys(second).map(function(key) {
    secondMonth.push({
        month: key.split('_')[2],
        growth: second[key]
    });
});

let finalData = {
    first: firstMonth,
    second: secondMonth
}

Ответы [ 2 ]

5 голосов
/ 25 апреля 2019

Один из вариантов - .map внутри .reduce. Вы можете использовать Object.entries вместо Object.keys для одновременного получения ключей и значений, что немного сократит количество необходимого синтаксиса:

const data = {
    first: {
        date_2019_01: 10,
        date_2019_02: 15,
    },
    second: {
        date_2019_01: 30,
        date_2019_02: 35,
    }
};
const newData = Object.entries(data).reduce((a, [key, obj]) => {
  a[key] = Object.entries(obj).map(([key, growth]) => ({
    month: Number(key.slice(10)),
    growth
  }));
  return a;
}, {});
console.log(newData);
0 голосов
/ 25 апреля 2019

Когда дело доходит до качества кода, хорошим способом является извлечение логики в функции со значимыми именами.Код имеет тенденцию к росту, поэтому извлечение логики в биты (функции) будет иметь много преимуществ в будущем.По моему мнению, более короткий синтаксис / логика не всегда переводит в код хорошего качества, и во многих случаях легко читаемый / понятный код, даже немного более длинный, предпочтительнее короткого и сложного синтаксиса.

const data = {
    first: {
        date_2019_01: 10,
        date_2019_02: 15,
    },
    second: {
        date_2019_01: 30,
        date_2019_02: 35,
    }
};

function convertMonthData(monthData, resultArr){
    Object.keys(monthData).map(function(key) {
        resultArr.push({
            month: Number(key.slice(10)),
            growth: monthData[key]
        });
    });
}

let convertedMonthData = {};

Object.keys(data).map(function(key) {
    const monthData = data[key];
    convertedMonthData[key] = [];

    convertMonthData(monthData, convertedMonthData[key]);
});

console.log(convertedMonthData);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...