JavaScript将两个数组组合成一个对象

JavaScript将两个数组组合成一个对象,javascript,arrays,Javascript,Arrays,我有两个数组,slicesRank和slicescont,结构如下。每个元素都有id和value,这是一个46的数组。值由日期和度量值组成 e、 g.sliceRank[0]: {id:Catan=rank,values(数组(46)):{date,measurement}} e、 g.切片计数[0]: {id:Catan=count,value(数组(46)):{date,measurement}} 如果要将id名称中具有相同前缀的元素组合在一起,该怎么办。例如,这两个数组中的第一个元素 理想

我有两个数组,
slicesRank
slicescont
,结构如下。每个元素都有id和value,这是一个46的数组。值由日期和度量值组成

e、 g.
sliceRank[0]

{id:Catan=rank,values(数组(46)):{date,measurement}}

e、 g.
切片计数[0]
{id:Catan=count,value(数组(46)):{date,measurement}}

如果要将id名称中具有相同前缀的元素组合在一起,该怎么办。例如,这两个数组中的第一个元素

理想的结构是
{id:Catan,value(数组(46)):{date,count,rank}}

我尝试了以下操作,但是
值显示为未定义

    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);
    };
对于(i=0;i按片,我想你指的是
数组

const combinedArray=sliceRank.map((sliceItem,itemIndex)=>{
返回{
身份证件
值:sliceItem.values.map({date,measurement},valueIndex)=>({
日期,
计数:切片计数[itemIndex][valueIndex]。度量,
等级:测量,
}))
}
})
此解决方案返回一个使用
sliceRank
sliceCount
组合的对象数组。因此,现在每个数组项都包含结构
{date,count,rank}
值。map
是不可变的,因此两个片都是相同的。

按片,我想你的意思是
数组

const combinedArray=sliceRank.map((sliceItem,itemIndex)=>{
返回{
身份证件
值:sliceItem.values.map({date,measurement},valueIndex)=>({
日期,
计数:切片计数[itemIndex][valueIndex]。度量,
等级:测量,
}))
}
})

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

下面是一个示例转换,您可以尝试:

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
    }))
  };
});
这里有一个有效的例子

以下是一个示例转换,您可以尝试:

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
    }))
  };
});
这里有一个有效的例子 你可以试试这个

let sliceRank=[{id:“Catan=rank”,值:[{“date”:“10/10/2020”,“measurement”:120}];
让sliceCount=[{id:“Catan=count”,值:[{“date”:“10/10/2020”,“measurement”:20}]};
设newData=[];
常量数据=sliceRank.map((切片,切片索引)=>{
返回{
id:slice.id.split(“=”[0],
值:slice.values.map({date,measurement},valueIndex)=>({
日期,
等级:测量,
计数:切片计数[sliceIndex].values.map(r=>r.measurement)[0],
}))
}
})
console.log(数据);
您可以试试这个

let sliceRank=[{id:“Catan=rank”,值:[{“date”:“10/10/2020”,“measurement”:120}];
让sliceCount=[{id:“Catan=count”,值:[{“date”:“10/10/2020”,“measurement”:20}]};
设newData=[];
常量数据=sliceRank.map((切片,切片索引)=>{
返回{
id:slice.id.split(“=”[0],
值:slice.values.map({date,measurement},valueIndex)=>({
日期,
等级:测量,
计数:切片计数[sliceIndex].values.map(r=>r.measurement)[0],
}))
}
})

log(数据);
{id:Catan=rank,value(数组(46)):{date,measurement}
语法无效。不清楚您使用的数据结构is@CertainPerformance您好,很抱歉这里造成的任何混乱。我是JS新手。我在这里添加了两个屏幕截图,试图显示
slicesRank
的结构,这会有帮助吗?
{id:Catan=rank,values(Array(46)):{date,measurement}
语法无效。不清楚您使用的数据结构is@CertainPerformance您好,很抱歉给您带来任何混乱。我是JS新手。我在这里添加了两个屏幕截图,试图显示
slicesRank
的结构,这会有帮助吗?