2015-11-25 40 views
2

我有兩組數組,$scope.Skills$scope.skillslist根據數組中的值設置數組值[Angular,for each]

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中的項目運行它,如果匹配,則將檢查項設置爲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"; 
     } 
    } 
}); 

但馬上我知道我做錯了,因爲我應該尋找的forEach skillslist吧?但是當我這樣做時,我不知道如何改變每個Checked值。換一切Skillsskillslist沒有幫助。

在我的ng-repeat skillslist中,我看到第一個項目的Checked值爲「Added」,其餘的Checked值爲「no」。

我一直在閱讀forEach示例,但找不到與我正在嘗試做什麼有關的事情,以這種方式引用兩個不同的數組。任何指針將不勝感激!

+0

風格建議:變量名一般不應該大寫,不使用像哨兵值「添加「和」否「使用內置的布爾值。 –

+0

謝謝,下次還會記住小寫!我只使用「添加」和「否」,因爲它們涉及到應用於ng-repeat項目的css類,我真的不想要類名稱爲true/false – intoodeep

回答

3

如果您正在迭代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"; 
    } 
}); 
+0

感謝那個SimpleJ,這真的很有幫助。我沒有意識到我可以像這樣來比較兩個陣列。 – intoodeep

0

你可以看一下JavaScript的someforEach

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

JSFiddle