首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Normalizr转换模式问题

Normalizr转换模式问题
EN

Stack Overflow用户
提问于 2018-05-25 20:44:40
回答 1查看 75关注 0票数 1

如何转换某些json数组

代码语言:javascript
复制
[
   {
      "travelExpenseId":11,
      "tripId":2,
      "paymentPurpose":"some payment purpose 2",
      "receiptNumber":"EF12312_2",
      "receiptDate":"2018-09-30T00:00:00",
      "receiptPrice":107000.0,
      "receiptCurrency":"руб."
   },
   {
      "travelExpenseId":10,
      "tripId":2,
      "paymentPurpose":"some payment purpose 1",
      "receiptNumber":"EF12312_1",
      "receiptDate":"2018-09-30T00:00:00",
      "receiptPrice":107000.0,
      "receiptCurrency":"руб."
   }
]

适合用travelExpenseId快速获取费用和用tripId获取费用。

现在我使用类似这样的东西:

代码语言:javascript
复制
export const expenseSchema = new schema.Entity('expenses', {}, { idAttribute: 'travelExpenseId' });
export const expensesListSchema = [expenseSchema];

并获得结果:

代码语言:javascript
复制
data: {
  entities: {
    expenses: {
      '10': {
        travelExpenseId: 10,
        tripId: 2,
        paymentPurpose: 'some payment purpose 1',
        receiptNumber: 'EF12312_1',
        receiptDate: '2018-09-30T00:00:00',
        receiptPrice: 107000,
        receiptCurrency: 'руб.'
      },
      '11': {
        travelExpenseId: 11,
        tripId: 2,
        paymentPurpose: 'some payment purpose 2',
        receiptNumber: 'EF12312_2',
        receiptDate: '2018-09-30T00:00:00',
        receiptPrice: 107000,
        receiptCurrency: 'руб.'
      }
    }
  },
  result: [
    11,
    10
  ]
}

我想在data.entities中添加额外的模式expensesByTripId,这样结果看起来应该类似于:

代码语言:javascript
复制
data: {
  entities: {
    expensesByTripId: {
       '2': [10, 11],
    },
    expenses: {
      '10': {
        travelExpenseId: 10,
        tripId: 2,
        paymentPurpose: 'some payment purpose 1',
        receiptNumber: 'EF12312_1',
        receiptDate: '2018-09-30T00:00:00',
        receiptPrice: 107000,
        receiptCurrency: 'руб.'
      },
      '11': {
        travelExpenseId: 11,
        tripId: 2,
        paymentPurpose: 'some payment purpose 2',
        receiptNumber: 'EF12312_2',
        receiptDate: '2018-09-30T00:00:00',
        receiptPrice: 107000,
        receiptCurrency: 'руб.'
      }
    }
  },
  result: [
    11,
    10
  ]
}

或者提供适合我的情况的任何其他方式

EN

回答 1

Stack Overflow用户

发布于 2018-05-25 21:57:09

代码语言:javascript
复制
let data = {
      entities: {
        expenses: {
          '10': {
            travelExpenseId: 10,
            tripId: 2,
            paymentPurpose: 'some payment purpose 1',
            receiptNumber: 'EF12312_1',
            receiptDate: '2018-09-30T00:00:00',
            receiptPrice: 107000,
            receiptCurrency: 'руб.'
          },
          '11': {
            travelExpenseId: 11,
            tripId: 2,
            paymentPurpose: 'some payment purpose 2',
            receiptNumber: 'EF12312_2',
            receiptDate: '2018-09-30T00:00:00',
            receiptPrice: 107000,
            receiptCurrency: 'руб.'
          }
        }
      },
      result: [
        11,
        10
      ]
    }

    let object = {};

    Object.values(data.entities.expenses).forEach(expenses => {
      
      let result = object[expenses.tripId] || [];
      object[expenses.tripId] = [...result, expenses.travelExpenseId];
    });

		data.entities["expensesByTripId"] = object;
    console.log(data);

我不确定Normalizr是如何工作的,但我正在使用VanillaJS根据您的需求定制一个

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50529558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档