var _txtString = ":un:-:un:-:deux:-:deux:-:deux:-:trois:-:trois:" ;
var _array = ["un", "deux", "trois"] ;
var _items = new Array();
for (var t =0; t < _array.length; t++) {
found = _txtString.match(new RegExp(':' + _array[t]+ ':', 'g'));
_items[t] = parseInt(found.length);
//_items.sort();
document.write("<br />" + _items[t] + " " + _array[t]);
}
您好, 当我运行此代码时,显示的结果已正确计算:
2 un
3 deux
2 trois
但是当我取消注释sort()行时,count是错误的:
2 un
3 deux
3 trois <=
我想要的是对数值返回的结果进行排序。什么是beyound我的理解是sort()函数改变了实际值?!有什么线索的原因?
由于
答案 0 :(得分:2)
因为您正在排序,所以您正在更改数组的顺序。所以当你排序&#34; 3&#34;成为最后一个索引并将其写出来。
_items[t] = parseInt(found.length); //[2,3,2]
_items.sort(); //[2,2,3]
document.write("<br />" + _items[t] + " " + _array[t]); //here you are reading the last index which is 3
如果您想按计数排序,则需要在计算完所有内容后进行排序。
基本理念:
var _txtString = ":un:-:un:-:deux:-:deux:-:deux:-:trois:-:trois:";
var _array = ["un", "deux", "trois"];
var _items = new Array();
for (var t = 0; t < _array.length; t++) {
found = _txtString.match(new RegExp(':' + _array[t] + ':', 'g'));
_items.push({
count: found.length,
text: _array[t]
});
}
_items.sort(function (a, b) {
return a.count - b.count;
});
for (var i = 0; i < _items.length; i++) {
console.log(_items[i].count, _items[i].text);
}
答案 1 :(得分:2)
javascript中的sort命令执行就地排序,这意味着它将改变您的数组顺序。当发生这种情况时,它只是让我觉得你的代码与你期望的内容完全不同步。
除非您复制数组并对副本进行排序,否则无法避免这种情况,因此原始数组保持原样。