js输出未排序的数组

时间:2014-07-16 11:13:55

标签: javascript jquery arrays sorting

我的代码也在this fiddle中 我列出了下面的输出和预期输出。我无法理解为什么我还没有对rNums进行排序但它仍然输出了sorterd结果?

如果我注释掉sort函数,那么随机出现我想要但没有订购。我在这里做错了什么?

随机应该在nNums中显示,有序应该按数字顺序显示吗?

    <ul id="random"></ul>
    <ul id="ordered"></ul>

    <script>
    var rNums = [1,5,3,2,4];
    console.log(rNums);
    var sortRNums = rNums;

    sortRNums.sort(function (a, b) {
        return a - b
    });

    $.each(rNums, function (index, value) {
        $("#random").append('<li>' + value + '</li>');
    });

    $.each(sortRNums, function (index, value) {
        $("#ordered").append('<li>' + value + '</li>');
    });
    console.log(sortRNums);
    </script>

输出

    <ul id="random">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
    </ul>

    <ul id="ordered">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
    </ul>

预期产出

    <ul id="random">
            <li>1</li>
            <li>5</li>
            <li>3</li>
            <li>2</li>
            <li>4</li>
    </ul>

    <ul id="ordered">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
    </ul>

3 个答案:

答案 0 :(得分:5)

sort修改了在排序之前创建副本所需的原始数组。

var sortRNums = rNums.slice(0);

答案 1 :(得分:2)

这是因为变量sortNums指向相同的内存位置 JsFiddle

var rNums = [1,5,3,2,4];
var rUnsortedNums = $.map(rNums, function(i){return i;});
console.log(rNums);
var sortRNums = rNums;

sortRNums.sort(function (a, b) {
    return a - b
});

$.each(rUnsortedNums, function (index, value) {
    $("#random").append('<li>' + value + '</li>');
});

$.each(sortRNums, function (index, value) {
    $("#ordered").append('<li>' + value + '</li>');
});
console.log(sortRNums);

答案 2 :(得分:2)

问题是,

var sortRNums = rNums;

不会复制数组。 sortRNums和rNums指向同一个数组。

请查看此主题以获取更多信息: How do you clone an Array of Objects in Javascript?