Javascript 将大数组排序为更简单的数组
使用javascript将myarr排序到SorterDar中,以便将每个invidual id的所有值添加到一起的最佳方法是什么Javascript 将大数组排序为更简单的数组,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,使用javascript将myarr排序到SorterDar中,以便将每个invidual id的所有值添加到一起的最佳方法是什么 myarr = [{id: 10, val:100}, {id:10, val: 100}, {id:20, val:200}, {id:20, val:100}, {id:30, val:100}] sortedArr = [{id: 10, val: 200}, {id:20, val:300}, {id:30, 100}] 您需要保留关键点(点击)的地图,
myarr = [{id: 10, val:100}, {id:10, val: 100}, {id:20, val:200}, {id:20, val:100}, {id:30, val:100}]
sortedArr = [{id: 10, val: 200}, {id:20, val:300}, {id:30, 100}]
您需要保留关键点(点击)的地图,并减少原始数组。您可以在以后对其进行排序,因为数组将更小,从而加快排序速度
var myArr=[{id:10,val:100},{id:10,val:100},{id:20,val:200},{id:20,val:100},{id:30,val:100}];
var sortedArr=累加AndSortById(myArr,'id','val');
控制台日志(分拣机);
函数累计AndSortById(arr、字段、值){
var hitMap=arr.reduce((结果,项目)=>{
结果[项目[字段]]=(结果[项目[字段]]| | 0)+项目[值];
返回结果;
}, {});
返回Object.keys(hitMap).reduce((结果,键)=>{
var obj={};
obj[key]=hitMap[key];
结果:推送(obj);
返回结果;
}排序((a,b)=>a[field]>b[field]);
}
.as控制台包装{top:0;最大高度:100%!important;}
使用以下比较函数进行排序:
var myArr = [{id: 10, val:100}, {id:10, val: 100}, {id:20, val:200}, {id:20, val:100}, {id:30, val:100}];
function compare(a,b) {
if (a.id < b.id)
return -1;
if (a.id > b.id)
return 1;
return 0;
}
var sortedArr = myArr.sort(compare);
var myArr=[{id:10,val:100},{id:10,val:100},{id:20,val:200},{id:20,val:100},{id:30,val:100}];
功能比较(a、b){
如果(a.idb.id)
返回1;
返回0;
}
var-sortedar=myArr.sort(比较);
首先对每个ID的值求和,然后将它们推送到一个新数组中
let myarr = [{ id: 10, val: 100 }, { id: 10, val: 100 }, { id: 20, val: 200 }, { id: 20, val: 100 }, { id: 30, val: 100 }]
let group = {}
myarr.forEach((value, index) => {
if (group[value.id]) {
group[value.id] += value.val
}
else {
group[value.id] = value.val
}
})
let res = []
Object.keys(group).forEach((key) => {
res.push({ id: key, val: group[key] })
})
console.log(res);
你可以做:
constmyarr=[{id:10,val:100},{id:10,val:100},{id:20,val:200},{id:20,val:100},{id:30,val:100}]
常数temp=myArr.reduce((a,c)=>(a[c.id]=(a[c.id]| | 0)+c.val,a),{});
const-sortedar=Object.keys(temp.map)(k=>({id:+k,val:temp[k]}));
控制台日志(分拣机)代码>欢迎使用堆栈溢出!请拿着这本书,通读一遍,特别是做你的研究,看看相关的主题,然后试一试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会乐意帮忙的。祝你好运这不是所谓的排序,这是所谓的分组(在你的例子中,通过id属性)。感谢bergi,你的评论让我找到了这个线程,尽管OP使用了“排序”这个词,但他们描述的完全不同。