我有两个数组,
slicesRank
和slicesCount
,其结构如下。每个元素都有 id 和 value,是一个 46 个数组。Values 由日期和测量值组成。
例如
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
的结构是这样的:
这是您可以尝试的示例转换:
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
通过切片我想你的意思是
Array
。
const combinedArray = sliceRank.map((sliceItem, itemIndex) => {
return {
id,
values: sliceItem.values.map(({ date, measurement }, valueIndex) => ({
date,
count: sliceCount[itemIndex][valueIndex].measurement,
rank: measurement,
}))
}
})
此解决方案返回使用
sliceRank
和 sliceCount
组合的对象数组。所以现在每个数组项都包含结构 values
的 { date, count, rank }
。 Array.map
是不可变的,因此两个切片都是相同的。
你可以试试这个。
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);