根据单独数组中的值设置数组的值[Angular,forEach]

Setting the values of an array depending on the values in a separate array [Angular, forEach]

本文关键字:数组 Angular forEach 设置 单独      更新时间:2023-09-26

我有两组数组,$scope.Skills$scope.skillslist

Skills数组有很多值,所以我只包括与问题相关的值:

$scope.Skills = [
    {LotsOfValues: "blah", Skill_Values__c: "1"},
    {LotsOfValues: "blah", Skill_Values__c: "2"},
    {LotsOfValues: "blah", Skill_Values__c: "3"}
];

skillslist阵列:

$scope.skillslist = [
    {Skill_Values__c: "1", Checked: ""},
    {Skill_Values__c: "2", Checked: ""},
    {Skill_Values__c: "3", Checked: ""},
    {Skill_Values__c: "4", Checked: ""},
    {Skill_Values__c: "5", Checked: ""},
    {Skill_Values__c: "6", Checked: ""},
    {Skill_Values__c: "7", Checked: ""}
];

我想做的是,对于skillslist中的每个项目,针对Skills中的项目运行它,如果匹配,则将Checked设置为true,如果不匹配,则设置为false。如何才能做到这一点?

我正在使用forEach函数,这就是我目前所拥有的:

angular.forEach(skills, function (value) {
    console.log("FOR EACH");
    for (var i = 0; i <= $scope.skillslist.length; i++) {
        if ($scope.skillslist[i].Skill_Values__c === value.Skill_Values__c) {
            $scope.skillslist[i].Checked = "Added";
        } else {
            $scope.skillslist[i].Checked = "no";
        }
    }
});

但我马上就知道我做错了,因为我应该寻找每个skillslist,对吧?但当我这样做时,我不知道如何更改每个值的Checked值。将所有Skills替换为skillslist没有帮助。

在我对skillslist的ng重复中,我看到第一个项目的Checked值为"Added",其余项目的Checkedvalue为"no"。

我一直在阅读forEach的例子,但找不到任何与我试图做的事情相关的例子,关于以这种方式引用两个不同的数组。任何建议都将不胜感激!

如果在skillslist上迭代,则传递给回调的每个值都将是skillslist的单独值。因此,如果您想更改skillslist的值,可以通过更改传递给回调的第一个参数来实现。像这样:

skillslist.forEach(function(skill) {
  var isInSkills = skills.some(function(skillValue) {
    return skillValue.Skill_Values__c === skill.Skill_Values__c;
  });
  if(isInSkills) {
    skill.checked = "Added";
  } else {
    skill.checked = "no";
  }
});

您可以查看JavaScript的some和forEach:

$scope.skillslist.forEach(function (skillFromList) {
    skillFromList.Checked = $scope.Skills.some(function (skill) {
        return skillFromList.Skill_Values__c === skill.Skill_Values__c;
    });
});

JSFiddle