Используя фильтр JavaScript, как я могу написать это, динамически получая месяц из того же массива? - PullRequest
0 голосов
/ 30 марта 2020
        let janFilteredData = YearlyExpense.filter((data) => {
        return data.month === "January"
    })
    let febFilteredData = YearlyExpense.filter((data) => {
        return data.month === "February"
    })
    let marFilteredData = YearlyExpense.filter((data) => {
        return data.month === "March"
    })
    .
    .
    .
    . 
    .

    let decFilteredData = YearlyExpense.filter((data) => {
        return data.month === "December"
    })

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

Массив YearlyExpense равен;

const MonthlyExpense = [{
UserID: "1",
UserName: "George",
MonthlyExpenseDetails:[
    {
        TotalAmount: "70000",
        TotalNoOfBills: 16,
        ExpenseTypeDetails: [
            {
                BillType: "Taxi",
                NoOfBills: 4,
                Amount: "30000",
                Approved: {
                    TotalAmount: 10000,
                    TotalNoOfBills: 1
                },
                Rejected: {
                    TotalAmount: 10000,
                    TotalNoOfBills: 0
                },
                Pending: {
                    TotalAmount: 10000,
                    TotalNoOfBills: 3
                }
            },
            {
                BillType: "Food",
                NoOfBills: 4,
                Amount: "10000",
                Approved: {
                    TotalAmount: 10000,
                    TotalNoOfBills: 1
                },
                Rejected: {
                    TotalAmount: 0,
                    TotalNoOfBills: 0
                },
                Pending: {
                    TotalAmount: 0,
                    TotalNoOfBills: 3
                }
            },
            {
                BillType: "Fine",
                NoOfBills: 4,
                Amount: "30000",
                Approved: {
                    TotalAmount: 10000,
                    TotalNoOfBills: 1
                },
                Rejected: {
                    TotalAmount: 0,
                    TotalNoOfBills: 0
                },
                Pending: {
                    TotalAmount: 20000,
                    TotalNoOfBills: 3
                }
            }
        ]
    },
]},

{
UserID: "2",
UserName: "Figo",
MonthlyExpenseDetails:[
    {
        TotalAmount: "80000",
        TotalNoOfBills: 16,
        ExpenseTypeDetails: [
            {
                BillType: "Taxi",
                NoOfBills: 4,
                Amount: "30000",
                Approved: {
                    TotalAmount: 10000,
                    TotalNoOfBills: 1
                },
                Rejected: {
                    TotalAmount: 0,
                    TotalNoOfBills: 0
                },
                Pending: {
                    TotalAmount: 20000,
                    TotalNoOfBills: 3
                }
            },
            {
                BillType: "Food",
                NoOfBills: 4,
                Amount: "10000",
                Approved: {
                    TotalAmount: 0,
                    TotalNoOfBills: 1
                },
                Rejected: {
                    TotalAmount: 5000,
                    TotalNoOfBills: 0
                },
                Pending: {
                    TotalAmount: 5000,
                    TotalNoOfBills: 3
                }
            },
            {
                BillType: "Fine",
                NoOfBills: 4,
                Amount: "7100",
                Approved: {
                    TotalAmount: 6000,
                    TotalNoOfBills: 1
                },
                Rejected: {
                    TotalAmount: 100,
                    TotalNoOfBills: 0
                },
                Pending: {
                    TotalAmount: 1000,
                    TotalNoOfBills: 3
                }
            }
        ]
    },
]}]

export const YearlyExpense = [
{ month: "January", expense: MonthlyExpense },
{ month: "February", expense: MonthlyExpense },
{ month: "March", expense: MonthlyExpense },
{ month: "April", expense: MonthlyExpense },
{ month: "May", expense: MonthlyExpense },
{ month: "June", expense: MonthlyExpense },
{ month: "July", expense: MonthlyExpense },
{ month: "August", expense: MonthlyExpense },
{ month: "September", expense: MonthlyExpense },
{ month: "October", expense: MonthlyExpense },
{ month: "November", expense: MonthlyExpense },
{ month: "December", expense: MonthlyExpense }]

Я создаю эти данные для графика реакции c3 js. В таком случае, как я могу получить данные за соответствующий месяц, не повторяя код, как указано выше.

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Составьте массив за месяц

let months= ['January', 'February', 'March', 'May', 'June'] //complete array

Для динамического построения списка монтов из YearlyExpense используйте следующее:

let months = YearlyExpense.map((item) => item.month)

И затем выполните функцию карты

let result = months.map((item) => ({[item]: YearlyExpense.filter((data) => 
        data.month === item)}))

Получит результаты в формате массива с объектами, где ключ - название месяца, а значение - результаты фильтра. например, [{"January": <data here>}, {"February": <data here>}]

Если вам нужны только данные, просто добавьте результат фильтрации, например:

let months= ['January', 'February', 'March', 'May', 'June'] //complete array

let result = months.map((item) => YearlyExpense.filter((data) => 
        data.month === item))

Если вам нужна такая структура { month: "January", expense: MonthlyExpense }, тогда:

 let months= ['January', 'February', 'March', 'May', 'June'] //complete array

    let result = months.map((item) => ({month: item, expense: YearlyExpense.filter((data) => 
            data.month === item)}))
0 голосов
/ 30 марта 2020

Вы можете попробовать что-то вроде этого:

function monthlyFilteredData(yearlyExpense,month){
  return yearlyExpense.filter(data => data.month === month)
}

let janFilteredData = monthlyFilteredData(yearlyExpense, 'January')
let febFilteredData = monthlyFilteredData(yearlyExpense, 'February')
let marFilteredData = monthlyFilteredData(yearlyExpense, 'March')

и так далее.

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