为什么sort()函数会更改此数组中数字的值?

时间:2013-08-01 16:54:25

标签: javascript

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()函数改变了实际值?!有什么线索的原因?

由于

2 个答案:

答案 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命令执行就地排序,这意味着它将改变您的数组顺序。当发生这种情况时,它只是让我觉得你的代码与你期望的内容完全不同步。

除非您复制数组并对副本进行排序,否则无法避免这种情况,因此原始数组保持原样。