我正在使用一个函数来对数组的每个元素进行排序。 我已经编写了一个运行良好的函数。
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));
还有另一种方法来对函数进行编码而不是进行四个迭代吗?
谢谢
答案 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; }