在Angular中循环并比较数组中的值

时间:2018-02-07 14:01:07

标签: arrays angularjs

我试图通过比较两个数组中的值来预先选择角度1.4中的复选框,但由于某种原因,我的逻辑不会忽略数组中的第一个项目。 我绑定到checkboxlist的模型如下所示:

 $scope.weekDays = [{
    name: "Monday",
    value: false,
}, {
    name: "Tuesday",
    value: false,
}, {
    name: "Wednesday",
    value: false,
}, {
    name: "Thursday",
    value: false,
}, {
    name: "Friday",
    value: false,
}, ];

我从我的数据库收到的值是

'Monday,Tuesday,Thurdsay'

然后我将从db接收的值拆分为数组,如果两个数组中的days name匹配,我将值设置为true,检查复选框。

 var PrefDays = 'Monday,Tuesday,Thursday';
 var selected_pref_days = new Array();

 selected_pref_days = PrefDays.split(',');

 for(var i = 0; i < selected_pref_days.length; i++) {
    console.log(selected_pref_days[i]);
     angular.forEach($scope.weekDays, function (day) {
       if (selected_pref_days[i] == day.name) {
           day.value = true;
        }
      })
  }

我希望$ scope.weekDays如下所示:

$scope.weekDays = [{
name: "Monday",
value: true,
}, {
name: "Tuesday",
value: true,
}, {
name: "Wednesday",
value: false,
}, {
name: "Thursday",
value: true,
}, {
name: "Friday",
value: false,
}, ];

相反,我总是将第一个值设为“false”。有人可以帮助我吗? 谢谢

1 个答案:

答案 0 :(得分:1)

我找不到问题,但这是一个最适合我的解决方案(也很容易测试和调试)。很抱歉,我无法澄清您的情况,但至少您可以继续编写最终逻辑

$scope.weekDays = $scope.weekDays.map(d => {
    d.value = selected_pref_days.indexOf(d.name) != -1; 
    return d;
})