我有以下代码:
-initWithStyle:reuseIdentifier:
节点具有此(伪)结构:
var compare = function( nodeA, nodeB ){
return +nodeA.index - +nodeB.index;
};
var sort = function( nodes ){
nodes.sort( compare );
};
当我调用{
index: <integer>
value: <literal>
}
函数并打印出每个节点的索引时,它会以常规方式对它们进行排序:
sort
如何更改当前逻辑以使其看起来像这样? :
0
1
2
3
答案 0 :(得分:1)
您可以先按索引!=
0的条件排序,然后按索引值排序。
var data = [{
index: 2,
value: 'a'
}, {
index: 0,
value: 'b'
},{
index: 3,
value: 'c'
},{
index: 1,
value: 'd'
}]
var result = data.sort(function(a, b) {
return (b.index != 0) - (a.index != 0) || (a.index - b.index)
})
console.log(result)
答案 1 :(得分:1)
您可以为零添加特殊处理:
var compare = function(nodeA, nodeB) {
// in case both sides are equal
if (nodeA.index === nodeB.index) {
return 0;
}
if (nodeA.index === 0) {
return 1;
}
if (nodeB.index === 0) {
return -1;
}
return +nodeA.index - +nodeB.index;
};
var data = [{
index: 2,
value: 'a'
}, {
index: 0,
value: 'b'
}, {
index: 3,
value: 'c'
}, {
index: 1,
value: 'd'
}]
data.sort(compare);
console.log(data);
答案 2 :(得分:0)
只需更改比较:
var compare = function( nodeA, nodeB ){
return ((+nodeA.index || Infinity) - (+nodeB.index || Infinity)) || Infinity;
};
|| operator返回第一个不是“falsy”的值,这是一个“truthy”值,但也是实际值。这是为变量创建默认值的EMCA5“技巧”。
解释:
nodeA.index == 0 && nodeB.index > 0 => Infinity - somevalue == Infinity
nodeA.index > 0 && nodeB.index == 0 => somevalue - Infinity == -Infinity
nodeA.index == 0 && nodeB.index == 0 => Infinity - Infinity == NaN
,在这种情况下选择|| Infinity
选项答案 3 :(得分:0)
您只需稍微更改比较功能:
var compare = function( nodeA, nodeB ){
if (!+nodeA.index) return 1;
if (!+nodeB.index) return -1;
return +nodeA.index - +nodeB.index;
};