如果我有一系列以下项目,我想显示先排序的所有IsImportant=true
项目,然后显示排序的IsImportant=false
项目。
var sampleArray = [{
"Name": "A",
"IsImportant": true
}, {
"Name": "B",
"IsImportant": true
}, {
"Name": "C",
"IsImportant": false
}, {
"Name": "D",
"IsImportant": false
}, {
"Name": "E",
"IsImportant": false
},, {
"Name": "F",
"IsImportant": true
},
, {
"Name": "G",
"IsImportant": true
}, {
"Name": "H",
"IsImportant": false
}];
我试图写下面的compareFunction
来达到结果,但没有成功。会有更好的选择吗?
function comparator(a, b) {
//console.log(a,b);
if (a.IsImportant || b.IsImportant) {
if (a.Name > b.Name) {
return 1;
}
if (a.Name < b.Name) {
return -1;
}
}
return 0;
};
答案 0 :(得分:2)
你要做的是对2个键进行排序:首先,&#34; IsImportant&#34;键,第二,名字。比较器应按顺序检查每个键,并在高优先级键相等时仅移动到后续键。
因此:
function comparator(a, b) {
//console.log(a,b);
if (a.IsImportant && !b.IsImportant)
return 1;
if (!a.IsImportant && b.IsImportant)
return -1;
return a.Name.localeCompare(b.Name);
};
(.localeCompare()
函数是比较字符串进行排序的便捷方法。)
您可以利用这样一个事实:当它们与(true
和false
一起使用时,它会将布尔常量1
和0
视为function comparator(a, b) {
var diff = b.IsImportant - a.IsImportant;
if (diff) return diff;
return a.Name.localeCompare(b.Name);
}
和index
)数学运算符,所以你可以缩短一点:
$(document).ready(function(){
var index = 0
$("#rad-btn").click(function(){
index++
$("#rad-spin").css("transform", "rotate(" + 90 * index + "deg)");
});
});
无论哪种方式,当&#34; IsImportant&#34;时,比较器都不会比较名称。国旗是不同的。如果这两个标志对于要比较的两个项都是真或假,则然后检查名称。这样,您将按名称顺序获取所有重要的,然后是所有其他重要的。
答案 1 :(得分:0)
为什么不呢:
<tr>
&#13;