Javascript 如何在.each()中动态创建唯一的对象?

Javascript 如何在.each()中动态创建唯一的对象?,javascript,function,object,Javascript,Function,Object,我正在对项目列表运行.each(),并在HTML中对这些项目进行分类。在之后的函数中,我将检查哪些项被选中(复选框)。在查找选中的框的函数(prepareTrainings();)中,我需要它显示.each()结果中的数据。基本上,如果用户选中X复选框,则显示该项目的课程名称和URL 我的问题是:我不确定什么是最佳实践。我是否应该创建一个对象来将这些值存储在if(trainingGroup等)语句中 $.ajax({ url: "mySite", type: "GET", headers: {

我正在对项目列表运行.each(),并在HTML中对这些项目进行分类。在之后的函数中,我将检查哪些项被选中(复选框)。在查找选中的框的函数(prepareTrainings();)中,我需要它显示.each()结果中的数据。基本上,如果用户选中X复选框,则显示该项目的课程名称和URL

我的问题是:我不确定什么是最佳实践。我是否应该创建一个对象来将这些值存储在if(trainingGroup等)语句中

$.ajax({
url: "mySite",
type: "GET",
headers: { "ACCEPT": "application/json;odata=verbose" },
success: function(data){
    $.each(data.d.results, function(index) { 
    var $this = $(this);
    var courseName = $this.attr('Title'); 
    var courseNumber = $this.attr('Course_x0020_Number'); 
    var courseUrl = $this.attr('URL'); 
    var trainingGroup = $this.attr('Training_x0020_Group'); 
    var recurrence = $this.attr('Recurrence'); 

    var dynCourseId = courseName.replace(/\s+/g, '')

        if (trainingGroup == 'Group1') {
            if (recurrence == "Don't Specify") {recurrence = '';
            } else recurrence = " ("+recurrence+")"; 
            document.getElementById('officeListSpan').innerHTML += '<ul class="courseLists"><li><input type="checkbox" id="'+dynCourseId+'"/>'+courseName+recurrence+'</li></ul>';
        }
        if (trainingGroup == 'Group2') {
            if (recurrence == "Don't Specify") {recurrence = '';
            } else recurrence = " ("+recurrence+")"; 
            document.getElementById('labListSpan').innerHTML += '<ul class="courseLists"><li><input type="checkbox" id="'+dynCourseId+'"/>'+courseName+recurrence+'</li></ul>';
        }
    });
    },
    error:  function(){
    alert("Failed to query SharePoint list data. Please refresh (F5).");
    }
});
function prepareTrainings() {
var idSelector = function() { 
    return this.id; 
};
var checkedCourses = $(":checkbox:checked").map(idSelector).get();
    alert("IDs for Courses Selected: " + checkedCourses);
$.ajax({
网址:“mySite”,
键入:“获取”,
标题:{“ACCEPT”:“application/json;odata=verbose”},
成功:功能(数据){
$.each(data.d.results,function(index){
var$this=$(this);
var courseName=$this.attr('Title');
var courseNumber=$this.attr('Course_x0020_Number');
var courseUrl=$this.attr('URL');
var trainingGroup=$this.attr('Training_x0020_Group');
var recurrence=$this.attr('recurrence');
var dynCourseId=courseName.replace(/\s+/g',)
如果(培训组=='Group1'){
if(recurrence==“不指定”){recurrence='';
}else recurrence=“(“+recurrence+”);
document.getElementById('officeListSpan').innerHTML+='
  • '+courseName+recurrence+'
'; } 如果(培训组=='Group2'){ if(recurrence==“不指定”){recurrence=''; }else recurrence=“(“+recurrence+”); document.getElementById('labListSpan').innerHTML+='
  • '+courseName+recurrence+'
'; } }); }, 错误:函数(){ 警报(“查询SharePoint列表数据失败,请刷新(F5)”; } }); 函数准备训练(){ var idSelector=function(){ 返回此.id; }; var checkedCourses=$(“:checkbox:checked”).map(idSelector.get(); 警报(“所选课程的ID:+checkedCourses”);

}

将处理过的对象保存在全局
var
中是有意义的。例如,定义如下所示的对象:

var courses = {};
然后在
。每个
函数中,像以前一样从HTML元素中提取信息,并将每个结果存储在另一个对象中:

$.each(data.d.results, function(index) { 
    var $this = $(this);
    var course = {}; //Create empty object


    course.name = $this.attr('Title'); 
    course.number = $this.attr('Course_x0020_Number'); 
    course.url = $this.attr('URL'); 
    course.trainingGroup = $this.attr('Training_x0020_Group'); 
    course.recurrence = $this.attr('Recurrence'); 
    course.id = course.name.replace(/\s+/g, '')

    //Store your course by id in the courses object
    courses[course.id] = course;

    //...
稍后在选中哪些复选框时,您可以检索每个课程的信息,如下所示:

var checkedIDs = $(":checkbox:checked").map(idSelector).get();
var course = courses[checkedIDs[0]]; //fetches the first selected course

//Now you can do whatever with the data, like print lists...
(...).innerHTML += '<ul class="courseLists"><li><input type="checkbox" id="'+course.id+'"/>'+course.name+course.recurrence+'</li></ul>';
var checkedds=$(“:checkbox:checked”).map(idSelector.get();
var课程=课程[checkedds[0]]//获取第一个选定的课程
//现在你可以对数据做任何事情,比如打印列表。。。
(…).innerHTML+='
  • '+课程名称+课程重复次数+'
';

如果我没有留下评论,我希望我正确理解了你的问题。

成功了!我今天早上一定没有很清楚地读到你的答复。但这确实有效。非常感谢!没问题:)你应该把这个标记为其他人的正确答案。我对stackoverflow的这一部分还是新手。我怎么做标记?我正在寻找一种方法来“投票”你等等。再次感谢你,你真的帮助了我!答案旁边应该有一个复选标记,您可以单击该复选标记,使其为绿色。要将答案标记为已接受,请单击答案旁边的复选标记,将其从灰色变为已填写