javascript - 将对象数组合并为单个对象数组

标签 javascript arrays lodash ramda.js

我正在寻找将对象数组合并到单个对象数组中,并将对象键附加到内部对象键中的每个键

我有类似的对象

    var myObj = {
                "Details": [{
                        "car": "Audi",
                        "price": 40000,
                        "color": "blue"
                    },
                    {
                        "car": "BMW",
                        "price": 35000,
                        "color": "black"
                    }
                ],
                "Accounts": [{
                        "Total": 2000
                    },
                    {
                        "Total": 3000
                    }
                ]
            }

并且键和对象的长度未知,我想像这样合并它

[
          {
            "Detailscar": "Audi",
            "Detailsprice": 40000,
            "Detailscolor": "blue",
            "AccountsTotal": 2000
          },
          {
            "Detailscar": "BMW",
            "Detailsprice": 35000,
            "Detailscolor": "black",
            "AccountsTotal": 3000
          }
        ]

我尝试过 Ramda mergeAll,但它在我的情况下不起作用,因为它只合并对象

这是我尝试过的

 var mergedArray = []
        R.mapObjIndexed((instance, instanceName) => {
            mergedArray.push(R.map((innerObj) => {
                var customObject = {};
                R.forEach((key) => {
                    customObject[`${instanceName}${key}`] = innerObj[key]
                }, Object.keys(innerObj))
                return customObject;
            }, instance))
        }, myObj)

我正在尝试将每个修改后的对象添加到 mergeArray 数组中,但它会为每次迭代添加,最后,它会创建 2 个数组

mergedArray 仍在创建两个不同的数组,其中对象的键将附加到对象的属性中,但我希望将其合并到单个对象数组中。

我错过了一些东西。我应该怎么做才能解决这个问题?

提出一些帮助。

最佳答案

使用Array.prototype.map并将索引作为第二个参数传递给其回调以从 Account 对象获取元素

const data = {
  "Details": [
    {
      "car": "Audi",
      "price": 40000,
      "color": "blue"
    },
    {
      "car": "BMW",
      "price": 35000,
      "color": "black"
    },
    {
      "car": "Porsche",
      "price": 60000,
      "color": "green"
    }

  ],
  "Accounts": [
    {
      "Total": 2000
    },
    {
      "Total": 3000
    },
    {
      "Total": 3000
    }

  ]
};

const mergeCarData = ({ Details, Accounts} = {}) => {
  return Details.length === Accounts.length ? Details.map(({ car, price, color}, idx) => ({
    Detailscar: car,
    Detailsprice: price,
    Detailscolor: color,
    AccountsTotal: Accounts[idx].Total
  })) : [];
};

console.log(mergeCarData(data));

关于javascript - 将对象数组合并为单个对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46587577/

相关文章:

javascript - 具有 HTML5 音频属性的 vuejs

javascript - 获取直接子项 - 不是嵌套子项

javascript - 如何在服务中动态生成模型名称

arrays - 将数组转换为指标矩阵

ruby-on-rails - rails/PostgreSQL : query value inside an integer array column

javascript - 如何使用 lodash 检查所有属性是否为 null 或空字符串?

javascript - 在 JavaScript 中查找嵌套的重复数组。 (lodash/underscore 中的嵌套数组 uniq)

javascript - IE11 中 ko.protected Observable 的问题

javascript - 有没有比象形文字更难破解的混淆 JavaScript 函数的方法?

Android:初始化<class>类型的二维数组