【问题标题】:How can I shuffle or randomize JSON object array data?如何随机化或随机化 JSON 对象数组数据?
【发布时间】:2015-11-25 01:23:32
【问题描述】:

我正在开发一个测验应用程序。我一直在尝试弄清楚如何在测验问题中随机排列选项。

我已经研究过,我发现最接近的是: shuffle array in ng-repeat angular

但是,我没有成功实现 shuffleArray() 函数。它对我不起作用。

我创建了一个 jsfiddle http://jsfiddle.net/fa4v8/121/

这是我的 ng-repeat:

<div ng-controller="MyCtrl">
    <p ng-repeat="(key,i) in options">{{options[key].text}}</p>
</div>

这是我的控制器:

var myApp = angular.module('myApp', []);

function MyCtrl($scope) {
    $scope.options = {
            "d": {
            "text": "Answer1-d"
        },
            "c": {
            "text": "Answer1-c"
        },
            "a": {
            "text": "Answer1-a"
        },
            "b": {
            "text": "Answer1-b"
        }
    }
}

输出顺序如下:(a,b,c,d)

答案-a

答案-b

答案-c

答案-d

有没有办法让选项按 $scope.options (d,c,a,b) 的顺序显示或以随机顺序显示?

【问题讨论】:

  • 如果您使用的是数组,这个答案会对您有所帮助:stackoverflow.com/questions/2450954/…。但是您似乎正在使用一个对象,因此您可能需要稍微调整一下。
  • 你能告诉我如何修改我的 jsfiddle 以使其工作吗?

标签: javascript arrays angularjs ng-repeat javascript-objects


【解决方案1】:

对您有帮助的工作示例:http://jsfiddle.net/owenmead/fa4v8/1/ 取自https://stackoverflow.com/a/21587316/3335993,只需在控制器中对它们进行排序并在每次迭代中分配一个随机排名。

function MyCtrl($scope) {
    $scope.list = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
    $scope.random = function() {
        return 0.5 - Math.random();
    }
}

【讨论】:

  • 您的选项出现在键值对而不是数组中是否有原因?
  • 是的,原因是因为我需要验证正确答案,并且每个答案都包含一个唯一的“optionId”以确认用户选择了正确的答案。
  • 当您每次登陆页面时,这是否必须是随机的?如果是这样,那么您可以在控制器中执行此操作。
  • 我从数据库中获取选项,我使用 PHP/MySQL 作为后端。我可以使用 PHP shuffle() 函数以随机顺序生成数据,从我的示例中可以看出,对象为 d、c、a、b,但 HTML 页面呈现 a、b、c、d
【解决方案2】:

实际上,ng-repeat 将完全按照定义的顺序返回对象的键 - 只要您使用 Angular 1.4 及更高版本。直到 1.3 版,ngRepeat 指令用于按字母顺序对键进行排序。 您提供的 jsfiddle 使用的是 1.0 版...

看到这个笨蛋http://plnkr.co/edit/bStyZU 还有这个解释https://docs.angularjs.org/api/ng/directive/ngRepeat

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2012-08-12
    • 1970-01-01
    相关资源
    最近更新 更多