gpt4 book ai didi

javascript - 如何基于三个键对数组对象进行分组

转载 作者:行者123 更新时间:2023-12-04 10:41:24 25 4
gpt4 key购买 nike

基于这个问题 Group array items using object

我引用了这个答案,回答者 https://stackoverflow.com/users/1094311/1983

所以我从这个 jquery 获取数据然后我解析它,之后我将它推送到变量

我从 myurl 得到的数据是这样的

{"pname":"some1","datax":2.0643278,"prov":"11","datay":1},{"pname":"some1","datax":3.2142857142857144,"prov":"11","datay":1},{"pname":"some2","datax":1.125,"prov":"12","datay":1},{"pname":"some2","datax":1.6666666666666667,"prov":"12","datay":2}

这就是我的阵列开始的方式
$(document).ready(function(){
$.ajax({
url: "myurl",
method: "GET",
success: function(data) {

var parsedJSON = JSON.parse(data);

var result1 = [
(function(data) {
let tmp = [];

data.forEach(e => {
tmp.push({
type: "firstid",
prov: e.prov,
name: e.pname,
showInLegend:false,
dataPoints:[{x:e.datax, y:e.datay}],
})
});

return tmp;
})(parsedJSON)
];


从那里我得到了 result1[0],如果我控制台记录它,它会是这样的
[        { type: "firstid",
prov: 11,
name: some1,
showInLegend:false,
dataPoints:[{x:2.0643278, y:1}]
},
{ type: "firstid",
prov: 11,
name: some1,
showInLegend:false,
dataPoints:[{x:3.2142857142857144, y:1}]
},
{ type: "firstid",
prov: 12,
name: some2,
showInLegend:false,
dataPoints:[{x:1.125, y:1}]
},
{ type: "firstid",
prov: 12,
name: some2,
showInLegend:false,
dataPoints:[{x:1.6666666666666667, y:1}]
}]


当我控制台记录它时,我想得到一些数组是这样的:
[        { type: "firstid",
prov: 11,
name: some1,
showInLegend:false,
dataPoints:[ {x:2.0643278, y:1},
{x:3.2142857142857144, y:1}]
},
{ type: "firstid",
prov: 12,
name: some2,
showInLegend:false,
dataPoints:[ {x:1.125, y:1},
{x:1.6666666666666667, y:1}]
}]


我花了我的时间试图通过数组合并来解决它,但似乎我无法弄清楚,任何帮助都会很好

最佳答案

使用 Array.prototype.reduceArray.prototype.find应该做的伎俩。
reduce循环遍历数组中的每个元素。它以一个空数组开始:[] .然后代码检查 find如果元素已经在新数组中。如果是这样,请添加 dataPoints到现有数组。如果它不存在,则将对象推送到新数组。

const obj = [{"pname":"some1","datax":2.0643278,"prov":"11","datay":1},{"pname":"some1","datax":3.2142857142857144,"prov":"11","datay":1},{"pname":"some2","datax":1.125,"prov":"12","datay":1},{"pname":"some2","datax":1.6666666666666667,"prov":"12","datay":2}];

objReduced = obj.reduce((acc, cur) => {
const dbItem = acc.find( element => element.prov === cur.prov);
if (dbItem)
{
dbItem.dataPoints.push({x: cur.datax, y: cur.datay});
}
else
{
acc.push({ type: "firstid",
prov: cur.prov,
name: cur.pname,
showInLegend: false,
dataPoints: [{x: cur.datax, y: cur.datay}]
});
}
return acc;
}, []);

console.log(objReduced);
obj = [{
type: "firstid",
prov: 11,
name: "some1",
showInLegend: false,
dataPoints: [{
x: 2.0643278,
y: 1
}]

关于javascript - 如何基于三个键对数组对象进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59910682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com