对数组元素进行排名

时间:2018-08-14 13:11:03

标签: javascript arrays

我正在使用一个函数来对数组的每个元素进行排序。 我已经编写了一个运行良好的函数。

var list = [
  {val:10},
  {val:15},
  {val:7},
  {val:21}
  ]

var fun = function (list){
var accum = 1;
list.map(e => {
          e.pos = accum;
          accum++;
          return e;
      });
      list.sort((a,b) => {
        if(a.val > b.val)
            return -1;
        if(a.val < b.val)
          return 1;
        return 0
      });
      accum = 1;
      list.map(e => {
          e.rank = accum;
          accum++;
          return e;
      });
      list.sort((a,b) => {
          if(a.pos > b.pos)
            return 1;
          if(a.pos < b.pos)
            return -1;
          return 0
      });
      
      return list;
}
console.log(fun(list));

还有另一种方法来对函数进行编码而不是进行四个迭代吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您可以将<select name="clients"> {this.props.clients && this.props.clients.length > 0 && this.props.clients.map((e, key) => { return ( <optgroup key={key} label={e.name}> {e.projects.map((project, projectKey) => { <option key={projectKey} value={project.id}> {project.name} </option>; })} </optgroup> ); })} </select> 方法与map结合使用。

此外,别忘了使用sort方法对给定slice副本的值进行排序,因为list方法就地执行

sort

答案 1 :(得分:1)

您可以将索引作为排名并对其进行排序。稍后生成一个新对象,并将索引添加为等级。

var list = [{ val: 10 }, { val: 15 }, { val: 7 }, { val: 21 }],
    ranks = Object.keys(list).map(Number).sort((a, b) => list[b].val - list[a].val),
    result = list.map(((o, i) => Object.assign({}, o, { pos: i + 1, rank: ranks.indexOf(i) + 1})));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }