Javascript 是否按所需顺序从数组中输出值?

Javascript 是否按所需顺序从数组中输出值?,javascript,jquery,html,arrays,Javascript,Jquery,Html,Arrays,我有一个包含多个记录的数组,每个记录都有ID、事件名称和客户名称。我使用的算法似乎没有按照我想要的方式工作。在开始循环数组之前,我在循环var eventId之外设置了空变量然后我开始循环,循环中有多个if语句。所以,如果eventId为空,我想用事件名附加tr,并在下面附加另一个带有客户名的tr。然后,下次如果我的eventId不是空的,我想检查名称是否与记录匹配,如果匹配,我只想在现有tr中附加td并输出客户名称。如果它们不匹配,我希望输出带有事件名称的新tr和带有客户名称的新tr。我这里有

我有一个包含多个记录的数组,每个记录都有ID、事件名称和客户名称。我使用的算法似乎没有按照我想要的方式工作。在开始循环数组之前,我在循环
var eventId之外设置了空变量然后我开始循环,循环中有多个if语句。所以,如果eventId为空,我想用事件名附加tr,并在下面附加另一个带有客户名的tr。然后,下次如果我的eventId不是空的,我想检查名称是否与记录匹配,如果匹配,我只想在现有tr中附加td并输出客户名称。如果它们不匹配,我希望输出带有事件名称的新tr和带有客户名称的新tr。我这里有一个工作示例,看起来我在屏幕上输出了两次
test1
,我不希望这样。我应该只有一次活动名称,并且该活动的所有客户都应位于该活动的下方。 这是我的密码:

如果你看到我的代码被破坏了,请告诉我。我认为我在添加元素方面有问题,或者我的算法缺少一些东西。提前谢谢

Javascript代码:

$( document ).ready(function() {
    var myRes = [];
    myRes.push({'myId':"42",'eventName':"Test 1",'rCustomer':"Mike, Allan"});

    myRes.push({'myId':"42",'eventName':"Test 1",'rCustumer':"Gates, Bill"});

    myRes.push({'myId':"19",'eventName':"Spring 2016",'rCustomer':"John, Bill"});

    myRes.push({'myId':"19",'eventName':"Spring 2016",'rCustomer':"Adams, Ron"});

    myRes.push({'myId':"31",'eventName':"May Test 1",'rCustomer':"Steve, Marie"});

    myRes.push({'myId':"42",'eventName':"Test 1",'rCustomer':"Ariel, Bill"});

    myRes.push({'myId':"32",'eventName':"Fall 2016",'rCustomer':"Ron, Nill"});

    myRes.push({'myId':"32",'eventName':"Fall 2016",'rCustomer':"Kim, Alen"});

    myRes.push({'myId':"32",'eventName':"Fall 2016",'rCustomer':"Will, Huges"});

    myRes.push({'myId':"32",'eventName':"Fall 2016",'rCustomer':"Seth, Peak"});

  var eventId = '';
    var count = 1;

  for(var i=0; i< myRes.length; i++){
        if(eventId != ''){
            if(eventId == myRes[i].myId){
                $('#row_' + count).append('<td>'+myRes[i].rCustomer+'</td>');
            }else{
                eventId = myRes[i].myId;
                count++;
                $('.myReservation').append('<tr><td><b>Event: '+myRes[i].eventName+'</b></td></tr>');
                $('.myReservation').append('<tr id="row_"'+count+'><td>'+myRes[i].rCustomer+'</td></tr>');
            }
        }else{
            eventId = myRes[i].myId;
            $('.myReservation').append('<tr><td><b>Event: '+myRes[i].eventName+'</b></td></tr>');
            $('.myReservation').append('<tr id="row_"'+count+'><td>'+myRes[i].rCustomer+'</td></tr>');
        }
    }
});
$(文档).ready(函数(){
var-myRes=[];
push({'myId':“42”,'eventName':“test1”,'rCustomer':“Mike,Allan”});
push({'myId':“42”,'eventName':“test1”,'rCustumer':“Gates,Bill”});
myRes.push({'myId':“19”,'eventName':“2016年春天”,'rCustomer':“约翰,比尔”});
myRes.push({'myId':“19”,'eventName':“2016年春季”,'rCustomer':“亚当斯,罗恩”});
push({'myId':“31”,'eventName':“May Test 1”,'rCustomer':“Steve,Marie”});
push({'myId':“42”,'eventName':“test1”,'rCustomer':“Ariel,Bill”});
myRes.push({'myId':“32”,'eventName':“2016年秋季”,'rCustomer':“Ron,Nill”});
myRes.push({'myId':“32”,'eventName':“2016年秋季”,'rCustomer':“Kim,Alen”});
myRes.push({'myId':“32”,'eventName':“2016年秋季”,'rCustomer':“Will,Huges”});
myRes.push({'myId':“32”,'eventName':“2016年秋季”,'rCustomer':“赛斯,匹克”});
var eventId='';
var计数=1;
对于(变量i=0;i
HTML代码:

<table>
  <tbody class="myReservation">
  </tbody>
</table>

插入带有ID的
tr
元素时,您将双引号放错了位置

替换为

更新:这可以实现您(可能)想要的:

var-found=[];
对于(变量i=0;i
您的问题是在每个循环上附加一个新元素:

首先,您正在测试“eventId”是否为空。如果是,则使用当前循环迭代“myId”进行设置

在这里,您不希望“Event:test1”出现两次,但在最后一次循环迭代中,myIdwas31

myRes.push({'myId':"31",'eventName':"May Test 1",'rCustomer':"Steve, Marie"});
因此,在if测试中,eventId不是等于myRes[i].myId,因此脚本会附加一个新的tr和重复事件

一个解决方案可以是:

$( document ).ready(function() {
        var myRes = [];
        myRes.push({'myId':"42",'eventName':"Test 1",'rCustomer':"Mike, Allan"});   
        myRes.push({'myId':"42",'eventName':"Test 1",'rCustomer':"Gates, Bill"});                   
        myRes.push({'myId':"19",'eventName':"Spring 2016",'rCustomer':"John, Bill"});                   
        myRes.push({'myId':"19",'eventName':"Spring 2016",'rCustomer':"Adams, Ron"});                   
        myRes.push({'myId':"31",'eventName':"May Test 1",'rCustomer':"Steve, Marie"});                  
        myRes.push({'myId':"42",'eventName':"Test 1",'rCustomer':"Ariel, Bill"});                   
        myRes.push({'myId':"32",'eventName':"Fall 2016",'rCustomer':"Ron, Nill"});                  
        myRes.push({'myId':"32",'eventName':"Fall 2016",'rCustomer':"Kim, Alen"});                  
        myRes.push({'myId':"32",'eventName':"Fall 2016",'rCustomer':"Will, Huges"});                    
        myRes.push({'myId':"32",'eventName':"Fall 2016",'rCustomer':"Seth, Peak"});


        myRes.forEach(function(value, key) {

            var table = $('.myReservation2');
            var elemInTable = table.find('tr#row_'+value.myId); // $('#row_42') as an example

            // If row doesn't exists, create it with it's customers
            if(!elemInTable.length) { 
                table.append('<tr id="row_'+value.myId+'"><td>'+value.eventName+'</td></tr>');

                elemInTable = table.find('tr#row_'+value.myId);
                elemInTable.after('<tr><td>'+value.rCustomer+'</td></tr>');
            }
            // If it already exists, simply add the customers
            else {
                elemInTable.after('<tr><td>'+value.rCustomer+'</td></tr>');
            }

        })
    });

(顺便说一句,我的英语很抱歉)

发布相关的问题代码本身怎么样?@A.Wolff我不认为写两次代码有什么意义,我用测试所需的所有数据创建了一个工作示例。如果将来你收到其他问题,并在这个网站上搜索,找到一个类似的问题和答案,并且都指向任何外部死链接,那么你就可以一直发布相关的问题代码……现在你有500多个代表,你应该知道。好的,谢谢你的建议。我没有时间为你写一个解决方案,但我的第一个想法是,你的问题出现了,因为你的数据没有特定的顺序。为每个事件创建仅包含该事件一部分的对象的子数组,然后渲染每个子数组将更为简单。我在代码中对此进行了更改,但表中仍有两次测试1。如果希望每个事件都有自己的部分,则整个
eventId
系统无法工作(而且是多余的):如果您希望相同类型的所有事件都在同一节中结束,只需在该节中放置一个唯一的id,并在附加用户时将其用作参考。您能否提供一个示例,说明应该是什么样子的?因此您在循环外创建了空数组,然后检查数组是否包含任何元素。是否正确?是的。其目的只是为了了解w如果某个事件已经有一个部分,有很多方法可以达到相同的效果,但这是我能想到的最快的方法。我很感谢你花时间来帮助我编写这段代码。那么,在这种情况下,你的解决方案是什么?我不应该检查eventID是否相等,然后执行此操作!=如果不相等?
<tr><td><b>Event: Test 1</b></td></tr>

<tr id="row_" 1=""><td>Mike, Allan</td></tr>
$('#row_' + count).append('<td>'+myRes[i].rCustomer+'</td>');
myRes.push({'myId':"42",'eventName':"Test 1",'rCustomer':"Ariel, Bill"});
myRes.push({'myId':"31",'eventName':"May Test 1",'rCustomer':"Steve, Marie"});
$( document ).ready(function() {
        var myRes = [];
        myRes.push({'myId':"42",'eventName':"Test 1",'rCustomer':"Mike, Allan"});   
        myRes.push({'myId':"42",'eventName':"Test 1",'rCustomer':"Gates, Bill"});                   
        myRes.push({'myId':"19",'eventName':"Spring 2016",'rCustomer':"John, Bill"});                   
        myRes.push({'myId':"19",'eventName':"Spring 2016",'rCustomer':"Adams, Ron"});                   
        myRes.push({'myId':"31",'eventName':"May Test 1",'rCustomer':"Steve, Marie"});                  
        myRes.push({'myId':"42",'eventName':"Test 1",'rCustomer':"Ariel, Bill"});                   
        myRes.push({'myId':"32",'eventName':"Fall 2016",'rCustomer':"Ron, Nill"});                  
        myRes.push({'myId':"32",'eventName':"Fall 2016",'rCustomer':"Kim, Alen"});                  
        myRes.push({'myId':"32",'eventName':"Fall 2016",'rCustomer':"Will, Huges"});                    
        myRes.push({'myId':"32",'eventName':"Fall 2016",'rCustomer':"Seth, Peak"});


        myRes.forEach(function(value, key) {

            var table = $('.myReservation2');
            var elemInTable = table.find('tr#row_'+value.myId); // $('#row_42') as an example

            // If row doesn't exists, create it with it's customers
            if(!elemInTable.length) { 
                table.append('<tr id="row_'+value.myId+'"><td>'+value.eventName+'</td></tr>');

                elemInTable = table.find('tr#row_'+value.myId);
                elemInTable.after('<tr><td>'+value.rCustomer+'</td></tr>');
            }
            // If it already exists, simply add the customers
            else {
                elemInTable.after('<tr><td>'+value.rCustomer+'</td></tr>');
            }

        })
    });
myRes.push({'myId':"42",'eventName':"Test 1",'rCustomer': ["Mike, Allan", "Gates", "Bill", "..."]})