如果我有一个JavaScript对象,例如:
var list = {
"you": 100,
"me": 75,
"foo": 116,
"bar": 15
};
Run Code Online (Sandbox Code Playgroud)
有没有办法根据值对属性进行排序?所以我最终得到了
list = {
"bar": 15,
"me": 75,
"you": 100,
"foo": 116
};
Run Code Online (Sandbox Code Playgroud) 任何人都可以为我验证这个吗?JavaScript没有strcmp()的版本,所以你必须写出类似的东西:
( str1 < str2 ) ?
-1 :
( str1 > str2 ? 1 : 0 );
Run Code Online (Sandbox Code Playgroud) 通过切换javascript排序函数
myArray.sort(function (a, b) {
return a.name.localeCompare(b.name);
});
Run Code Online (Sandbox Code Playgroud)
至
myArray.sort(function (a, b) {
return (a.name < b.name ? -1 : (a.name > b.name ? 1 : 0));
});
Run Code Online (Sandbox Code Playgroud)
我能够缩短在Chrome中对~1700元素阵列进行排序的时间,从1993毫秒到5毫秒.几乎是400倍的加速.不幸的是,这是以正确排序非英语字符串为代价的.
当我尝试进行排序时,显然我无法阻止我的UI阻塞2秒.有什么我可以做的,以避免可怕的缓慢localeCompare但仍然保持对本地化字符串的支持?
我有这个代码:
function deleteSheets(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var transp = ss.getSheetByName("aux").getRange("A2:A").getValues();
var i =0;
var c = 0;
var name;
for(i in sheets){
for(c in transp){
var nome_transp = transp[c][0];
switch(name = sheets[i].getName()){
case name == transp[c]:
ss.deleteSheet(sheets[i]);
break;
case name == "aux":
ss.deleteSheet(sheets[i]);
break;
case name == "nulos":
ss.deleteSheet(sheets[i]);
break;
case name == "Sem Transportadora":
ss.deleteSheet(sheets[i]);
break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以通过调试看到“sheets”和“transp”中的计数器和值是正确的,但它们从不删除它们各自的表,“aux”、“nulos”和“Sem transportadora”也不删除。是的,工作表的名称与数组相同。
任何见解?提前致谢!
可能重复:
在Java中比较字符串的最佳方法?
JavaScript中有没有一种快速的方法来找出2个字符串是否包含相同的子字符串?例如,我有以下两个字符串:“ audi是一辆汽车”和“ audiA8”。
如您所见,两个字符串中都包含“ audi”一词,但indexOf由于两个字符串中都有其他字符,因此我们无法使用简单的或RegExp 来找到它。
我正在尝试对数组进行排序.例如,给定数组a(下面),我想返回数组b.
我知道我可以做a.sort(),但是,我不想对实际的数组元素进行排序,而是对数组元素的属性(本例中的s)进行排序.如何实现这一目标?
谢谢
var a=[
{s:"ced",o:{obj:1}},
{s:"cde",o:{obj:2}},
{s:"ade",o:{obj:3}},
{s:"bde",o:{obj:4}}
]
var b=[
{s:"ade",o:{obj:3}},
{s:"bde",o:{obj:4}},
{s:"cde",o:{obj:2}},
{s:"ced",o:{obj:1}}
]
Run Code Online (Sandbox Code Playgroud)