Как я могу преобразовать объект в указанном формате c в другой формат - PullRequest
0 голосов
/ 10 марта 2020

Я с трудом пытаюсь преобразовать объект, предоставленный в указанном формате c, из API в целевой формат, используя javascript. Обратите внимание, что в целевом формате ложных значений нет. Это намеренно. Может кто-нибудь, пожалуйста, помогите, показывая, как я могу сделать этот вид преобразования. Спасибо

// Original format

    const rules= [
      {
        dealer: {
          view: true,
          edit: false,
          add: false
        },
        franchise: {
          view: true,
          edit: true,
          add: true
        },
         branch: {
          view: true,
          edit: false,
          add: false
        }
      }
    ]


// Target format

  const rules = [
          {
            actions: ["view"],
            subject: ["dealer"]
          },
          { 
            actions: ["view"],
            subject: ["franchise"]
          },
          { 
            actions: ["edit"],
            subject: ["franchise"]
          },
          { 
            actions: ["add"],
            subject: ["franchise"]
          },
          { 
            actions: ["view"],
            subject: ["branch"]
          }
        ];

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Я реализовал функцию отображения, которая берет каждый элемент и отображает его в соответствии со значением, если оно истинно

    let rules = [
        {
            dealer: {
                view: true,
                edit: false,
                add: false
            },
            franchise: {
                view: true,
                edit: true,
                add: true
            },
            branch: {
                view: true,
                edit: false,
                add: false
            }
        }
    ]

    rules = rules.map(item => {
        const keys = Object.keys(item);
        let mappedItem = []
        keys.forEach(key => {
            for (const property in item[key]) {
                if (item[key][property]) {
                    mappedItem.push({ subject: [key], actions: [property] })
                }
            }
        })
        return mappedItem;
    });
0 голосов
/ 10 марта 2020

let rules= [
  {
    dealer: {
      view: true,
      edit: false,
      add: false
    },
    franchise: {
      view: true,
      edit: true,
      add: true
    },
    branch: {
      view: true,
      edit: false,
      add: false
    }
  }
];

const result = rules.map(obj => Object.keys(obj).map(k => ({
  subject: [k],
  actions: Object.keys(obj[k]).filter(action => obj[k][action])
})).reduce((acc, cur) => ([
  ...acc,
  ...cur.actions.map(a => ({subject: cur.subject, actions: [a]}))
]),[]))
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...