【问题标题】:js output unsorted arrayjs输出未排序的数组
【发布时间】:2014-07-16 11:13:55
【问题描述】:

我有下面的代码,它也在this fiddle
我在下面列出了输出和预期输出。我不明白为什么我没有对 rNums 进行排序,但它仍然输出 sorterd 结果?

如果我注释掉排序函数,那么随机出现我想要的但不是有序的。我在这里做错了什么?

Random 应该按 nNums 的形式显示,ordered 应该按数字顺序显示?

    <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>

【问题讨论】:

    标签: javascript jquery arrays sorting


    【解决方案1】:

    sort修改原始数组需要在排序前创建一个副本。

    var sortRNums = rNums.slice(0);
    

    【讨论】:

    • 谢谢,我想我一定很接近了,现在正在工作。我将不得不在 slice 上阅读更多内容
    【解决方案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);
    

    【讨论】:

      【解决方案3】:

      问题是,

      var sortRNums = rNums;
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-15
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        • 1970-01-01
        相关资源
        最近更新 更多