【问题标题】:JavaScript Combine two arrays into one objectJavaScript 将两个数组合并为一个对象
【发布时间】:2021-03-07 18:55:03
【问题描述】:

我有两个数组,slicesRankslicesCount,结构如下。每个元素都有id和value,是46个数组。values由date和measurement组成。

例如sliceRank[0]: {id: Catan=rank, values(Array(46)) : {date, measurement} }

例如sliceCount[0]: {id: Catan=count, values(Array(46)) : {date, measurement} }

如果我想在 id 名称中组合具有相同前缀的元素,我应该怎么做。比如这两个数组的第一个元素。

所需的结构是 {id: Catan, values(Array(46)) : {date, count, rank} }

我尝试了以下方法,但 values 显示未定义。

    for(i=0; i<slicesRank.length; i++) {
        var newElement = {};
        newElement['id'] = slicesRank[i].id.replace('=rank', '');
        newElement['values'] = {
          date: slicesRank[i].date,
          rank: slicesRank[i].measurement,
          count: slicesCount[i].measurement
        };
        sliceNew.push(newElement);
    };

slicesRank的结构是这样的:

【问题讨论】:

  • {id: Catan=rank, values(Array(46)) : {date, measurement} } 语法无效。目前尚不清楚您正在使用的数据结构是什么
  • @CertainPerformance 您好,对于此处造成的任何混淆,我们深表歉意。我是 JS 新手。我添加了两个屏幕截图,试图在这里显示slicesRank 的结构,这有帮助吗?

标签: javascript arrays


【解决方案1】:

您可以尝试以下示例转换:

const combined = slicesRank.map((rank) => {
  const id = rank.id.replace("=rank", "");
  const count = slicesCount.find(
    (count) => count.id.replace("=count", "") === id
  );
  return {
    id,
    values: rank.values.map((val, index) => ({
      date: val.date,
      rank: val.measurement,
      count: count?.values[index].measurement
    }))
  };
});

这是一个工作示例 https://codesandbox.io/s/awesome-lovelace-e31zj?file=/src/index.js

【讨论】:

    【解决方案2】:

    slice 我想你的意思是Array

    const combinedArray = sliceRank.map((sliceItem, itemIndex) => {
        return {
            id,
            values: sliceItem.values.map(({ date, measurement }, valueIndex) => ({
                date,
                count: sliceCount[itemIndex][valueIndex].measurement,
                rank: measurement,
            }))
        }
    })
    

    此解决方案返回使用sliceRanksliceCount 组合的对象数组。所以现在每个数组项现在包含结构{ date, count, rank }valuesArray.map 是不可变的,因此两个切片将是相同的。

    【讨论】:

      【解决方案3】:

      你可以试试这个。

      let sliceRank=[{id: "Catan=rank",  values : [{"date":"10/10/2020", "measurement":120} ]}];
      let sliceCount=[{id: "Catan=count",  values :[{"date":"10/10/2020", "measurement":20} ] }];
      
      let newData=[];
      
      const data = sliceRank.map((slice, sliceIndex) => {
          return {
              id:slice.id.split("=")[0],
              values: slice.values.map(({ date, measurement }, valueIndex) => ({
                  date,            
                  rank: measurement,
                  count: sliceCount[sliceIndex].values.map(r=> r.measurement)[0],
              }))
          }
      })
      
      console.log(data);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-15
        • 1970-01-01
        • 1970-01-01
        • 2021-04-08
        • 1970-01-01
        • 2012-05-10
        • 2016-11-12
        • 1970-01-01
        相关资源
        最近更新 更多