2016-07-02 98 views
0
 console.log(previousCompetitors); 
     console.log(competitors); 
     if(data.isVisible) { 
      var moveIndexTo = []; 
      for(var q=0; q<competitors.length;q++) { 
       moveIndexTo.push(-1); 
      } 
      for(var i = 0; i<competitors.length; i++) { 
       for(var j = 0; j<previousCompetitors.length; j++) { 
        console.log(competitors[i].name); 
        console.log(previousCompetitors[j].name); 
        if(competitors[i].name === previousCompetitors[j].name) { 
         moveIndexTo[j]= i; 
         break; 
        } 
       } 
      } 
      console.log(moveIndexTo); 
     } 

我慢慢地疯了,试图找出这里发生了什么。我有一系列竞争对手的数据按顺序更新。他们都是数组,我想跟踪上次排序的变化。javascript循环字符串比较头痛

我console.log的数据,可以看到数据的顺序已经改变,但每次moveIndexTo数组最终是[0,1,2,3,4,5]意味着previousCompetitors竞争对手有平等订购。当我console.log他们在代码块的顶部,当我执行字符串比较时,他们之间如何改变?

竞争对手和previousCompetitors采取大致形式

[{名称: 'NAME1'},{名称: 'NAME2'},{名称: 'NAME3'},{名称: 'NAME4'},{名称:'name5'},{name:'name6'}]

在每个对象中都会有更多的事情发生。所以如果这是之前的竞争对手,那么竞争对手就会像

[{name:'name6'},{name:'name2'},{name:'name3'},{name:'name4'},{name : 'NAME5'},{名称: 'NAME1'}]。

请注意name1和name6的开关。所以我期望moveIndexTo是[5,1,2,3,4,0]。

+0

可以请你[编辑]你的问题,以显示样本输入和对应的期望输出(即competitors'的'比如内容和'previousCompetitors',和什么'moveIndexTo'应该在之后)? – nnnnnn

+0

数据非常大并且嵌套。但它只是一个对象数组,每个对象都有名称字段以及其他许多对象。我的意图是使用moveIndexTo通过将i存储在moveToIndex的第j个索引中来记录previousCompetitors中位置j处的对象当前位于竞争对手中的位置。 –

+0

我将你的示例数据和代码粘贴到小提琴中,结果是'[5,1,2,3,4,0]',就像你期望的一样:https://jsfiddle.net/1jxmsewr/ – nnnnnn

回答

1

就试试这个:moveIndexTo[i] = j; 小提琴在:https://jsfiddle.net/c9mbbpjj/

+0

为什么会有帮助? – nnnnnn

+0

其实你想要的是currentCompetitors而不是previousCompetitors的上下文中的变化。所以移动指数应该像上面那样。 – binariedMe

+0

除了我在发布15分钟之前发布的小提琴之前,您的答案显示OP的代码可以产生所需的结果,原因如下:https://jsfiddle.net/1jxmsewr – nnnnnn