Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将大数组排序为更简单的数组_Javascript_Arrays_Ecmascript 6 - Fatal编程技术网

Javascript 将大数组排序为更简单的数组

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}] 您需要保留关键点(点击)的地图,

使用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}]

您需要保留关键点(点击)的地图,并减少原始数组。您可以在以后对其进行排序,因为数组将更小,从而加快排序速度

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使用了“排序”这个词,但他们描述的完全不同。