排序并删除除数组中最后n个项目以外的所有内容

时间:2019-05-08 21:54:04

标签: javascript arrays

我有这样一种情况,我从API请求中获得带有键的随机值(每分钟约100个),我需要执行以下操作

  1. 将新项目推送到数组
  2. 如果键重复则替换项目
  3. 对原始Map进行排序,并删除原始数组中除最后n个元素之外的所有内容

我有以下代码,但它不会删除原始数组,但会复制最后2个元素的数组。

      var stats = new Map([['22',10],['32',3],['42',22],['52',7]]);
   // I set dynamic values like below inside ajax function , can be duplicate or new
            stats.set('22', 20);
            stats.set('12', 20);
            // sort by key
            var keys = Array.from(stats.keys());
            keys.sort();
            // get the last two
            keys = keys.slice(-2);
            // map the remaining keys to the desired structure
            var result = keys.map(key => { 
              return { 
                key: key, 
                value: stats.get(key) 
              }; 
            });
            console.log(result); 

`

1 个答案:

答案 0 :(得分:0)

将@Bergi的注释复制到代码中

var stats = new Map([['22',10],['32',3],['42',22],['52',7]]);
   // I set dynamic values like below inside ajax function , can be duplicate or new
            stats.set('22', 20);
            stats.set('12', 20);
            // sort by key
            var keys = Array.from(stats.keys());
            keys.sort();
            // get the last two
            keys = keys.slice(-2);
            // map the remaining keys to the desired structure
            keys.slice(0, -2).forEach(key => stats.delete(key))
            stats = keys.map(key => { 
              return { 
                key: key, 
                value: stats.get(key) 
              }; 
            });
            
            console.log(stats);