javascript - 映射一个数组并检查特定键是否具有相同的值,然后将两者合并

标签 javascript

这是我想要实现的目标:
我有这个数组:

const data = [
  { paidOn: "01", workstreamName: "Leeann",   amount: 242759 },
  { paidOn: "02", workstreamName: "Angelico", amount: 58142  },
  { paidOn: "03", workstreamName: "Zorine",   amount: 419310 },
  { paidOn: "02", workstreamName: "Janine",   amount: 135015 },
  { paidOn: "04", workstreamName: "Shannon",  amount: 6396   },
  { paidOn: "01", workstreamName: "Wang",     amount: 198277 },
];
  • 我需要找到所有具有相似值的“paidOn”键并将它们合并。
  • 使用 workstreamName 值作为键,使用数量值作为新键的值。

  • 所以输出看起来像这样:
    const data = [
      { paidOn:"01", "Leeann":  242759, "Wang":   198277 },
      { paidOn:"02", "Angelico": 58142, "Janine": 135015 },
      { paidOn:"03", "Zorine":  419310  },
      { paidOn:"04", "Shannon":  6396   }
      ];
    
    到目前为止,我已经设法使用以下代码实现了第 2 步,但无法弄清楚如何实现第 1 步:

    const data = [
      { paidOn: "01", workstreamName: "Leeann", amount: 242759 },
      { paidOn: "02", workstreamName: "Angelico", amount: 58142 },
      { paidOn: "03", workstreamName: "Zorine", amount: 419310 },
      { paidOn: "04", workstreamName: "Janine", amount: 135015 },
      { paidOn: "05", workstreamName: "Shannon", amount: 6396 },
      { paidOn: "05", workstreamName: "Wang", amount: 198277 },
      { paidOn: "06", workstreamName: "Maurise", amount: 389081 },
      { paidOn: "07", workstreamName: "Nike", amount: 125030 },
      { paidOn: "08", workstreamName: "Teodor", amount: 142803 },
      { paidOn: "08", workstreamName: "Stefan", amount: 398831 },
      { paidOn: "09", workstreamName: "Fancy", amount: 353254 },
      { paidOn: "10", workstreamName: "Salli", amount: 492496 },
      { paidOn: "10", workstreamName: "Daniela", amount: 147206 },
      { paidOn: "11", workstreamName: "Tandy", amount: 362225 },
      { paidOn: "11", workstreamName: "Sidnee", amount: 381233 },
      { paidOn: "11", workstreamName: "Kordula", amount: 86582 },
      { paidOn: "12", workstreamName: "Dedra", amount: 443826 },
      { paidOn: "02", workstreamName: "Essy", amount: 449565 },
    ];
    
    const workstreamNames = data.map((item) => {
      return item.workstreamName
    });
    
    const amount = data.map((item) => {
      return item.amount
    });
    
    const res = Object.fromEntries(workstreamNames.map((_, i) => [workstreamNames[i], amount[i]]))
    
    console.log(res);

    将不胜感激任何帮助或指针。

    最佳答案

    这是您可以做到的一种方法 - 这会修改 this answer返回自定义字典:

    const data = [
      { paidOn: "01", workstreamName: "Leeann", amount: 242759 },
      { paidOn: "02", workstreamName: "Angelico", amount: 58142 },
      { paidOn: "03", workstreamName: "Zorine", amount: 419310 },
      { paidOn: "02", workstreamName: "Janine", amount: 135015 },
      { paidOn: "04", workstreamName: "Shannon", amount: 6396 },
      { paidOn: "01", workstreamName: "Wang", amount: 198277 },
    ];
    
    const key = "paidOn";
    
    const result = Object.values(data.reduce(function(acc, x) {
        const sub = (acc[x[key]] = acc[x[key]] || {"paidOn": x[key]});
        sub[x["workstreamName"]] = x["amount"];
        return acc;
      }, {}));
    
    console.log(result);

    注:这是一个 O(n) 方法。

    关于javascript - 映射一个数组并检查特定键是否具有相同的值,然后将两者合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68704973/

    相关文章:

    javascript - 脚本属性未设置为 javascript 函数值

    javascript - 如何定位选择选项的数据属性?

    javascript - 为什么模态框不会慢慢淡出?

    javascript - Jquery特选

    javascript - 使用jquery在textarea中的颜色代码

    javascript - PHP Curl 超时导致 Javascript 客户端崩溃

    javascript - JQuery UI slider 错误(TypeError : max. toFixed is not a function)

    javascript - RxJS 5 refCount() 连接或取消订阅源时的执行逻辑

    javascript - 在 prototypejs 中循环遍历 li 并获取每个元素的 padding-left

    javascript - 切换路由时 VueJS 内存泄漏