首页 > 解决方案 > 将带有数组的对象转换为数组

问题描述

我有以下数据结构:

const data = {
  "firstName": "A",
  "lastName": "B",
  "address": [{
    "country": "France",
    "city": "Paris"
  },
    {
      "country": "Italy",
      "city": "Rome"
    }
  ],
};

使用 Ramda 我想将其转换为:

const result = [
  {
    "firstName": "A",
    "lastName": "B",
    "address": {
      "country": "France",
      "city": "Paris"
    },
  },
  {
    "firstName": "A",
    "lastName": "B",
    "address": {
      "country": "Italy",
      "city": "Rome"
    },
  },
];

标签: javascriptramda.js

解决方案


您可以使用一个converge函数来分叉该道具address,然后将其与列表中每个地址的主对象连接起来:

/**
 * R.pick could be replaced with R.omit
 * to let you black list properties:
 * R.omit(['address']); https://ramdajs.com/docs/#omit
**/
const createByAddress = R.converge(R.map, [
  R.pipe(R.pick(['firstName', 'lastName']), R.flip(R.assoc('address'))),
  R.prop('address'),
]);

const data = {
  "firstName": "A",
  "lastName": "B",
  "address": [{
    "country": "France",
    "city": "Paris"
    },
    {
      "country": "Italy",
      "city": "Rome"
    }
  ],
};

console.log(createByAddress(data));
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js" integrity="sha256-xB25ljGZ7K2VXnq087unEnoVhvTosWWtqXB4tAtZmHU=" crossorigin="anonymous"></script>


推荐阅读