2015-04-14 68 views
0

我想要一個數組('selectedWorkshops'),並將其中的對象移動到'registeredWorkshops'。然後,我還想從「精選工作坊」和另一個簡稱爲「工作坊」的陣列中刪除這些對象。基於For循環迭代的拼接數組

看到我在這裏codepen:http://codepen.io/trueScript/pen/wBVqNN

陣列:

var workshops = [ 
    { 
    name: 'apples', 
    WorkshopId: '19' 
    }, 
    { 
    name: 'oranges', 
    WorkshopId: '3b' 
    }, 
    { 
    name: 'pears', 
    WorkshopId: 'x6' 
    }, 
    { 
    name: 'pineapples', 
    WorkshopId: '55' 
    }, 
    { 
    name: 'watermelons', 
    WorkshopId: '8v' 
    } 
]; 

var selectedWorkshops = [ 
    { 
    name: 'oranges', 
    WorkshopId: '3b' 
    }, 
    { 
    name: 'watermelons', 
    WorkshopId: '8v' 
    }, 
    { 
    name: 'pears', 
    WorkshopId: 'x6' 
    } 
]; 

var registeredWorkshops = []; 

功能是應該車間搬到 'registeredWorkshops' 和 'selectedWorkshops' 和 '作坊' 將其刪除:

flipWorkshops = function(){ 
    var numberOfWorkshops = selectedWorkshops.length; 
    var X = 1; 
    for(var i = 0; i < numberOfWorkshops; i++){ 
     registeredWorkshops.push(selectedWorkshops[i]); 
     for(var j = 0, arrayLength = workshops.length; j < arrayLength; j++) { 
      var selectedWorkshop = selectedWorkshops[i]; 
      var originalWorkshop = workshops[j]; 
      if(selectedWorkshop == originalWorkshop){ 
       var matchingWorkshop = j; 
       workshops = workshops.splice(j, 1); 
       selectedWorkshops = selectedWorkshops.splice(i, 1); 
      } 
     } 
    } 
}; 
flipWorkshops(); 

爲什麼不能正確拼接「工作室」和「選定的W rkshops的數組像他們應該是?我究竟做錯了什麼?

+1

「拼接()方法增加/刪除數組項/,並返回刪除的項目(或多個)」。 http://www.w3schools.com/jsref/jsref_splice.asp所以,基本上,您將'workshop「減少爲單個對象,即已刪除的數組元素。 – bloodyKnuckles

回答

2

「splice()方法向/從數組添加/刪除項目,並返回刪除的項目。」 http://w3schools.com/jsref/jsref_splice.asp因此,基本上,您將研討會減少到單個對象,即已移除的數組元素。

相反,變化:

workshops = workshops.splice(j, 1); 
selectedWorkshops = selectedWorkshops.splice(i, 1); 

...到:

workshops.splice(j, 1); 
selectedWorkshops.splice(i, 1); 

JSFiddle


也許這是你想要什麼:

var registeredWorkshops = []; 
var flipWorkshops = function(){ 
    var numberOfWorkshops = selectedWorkshops.length; 
    var X = 1; 
    for(var i = numberOfWorkshops - 1; i >= 0; i--){ 
     registeredWorkshops.push(selectedWorkshops[i]); 
     var selectedWorkshop = selectedWorkshops[i]; 
     for(var j = workshops.length - 1; j >= 0; j--) { 
      var originalWorkshop = workshops[j]; 
      if(selectedWorkshop.name == originalWorkshop.name && 
       selectedWorkshop.WorkshopId == originalWorkshop.WorkshopId){ 
       var matchingWorkshop = j; 
       workshops.splice(j, 1); 
       selectedWorkshops.splice(i, 1); 
      } 
     } 
    } 
}; 
flipWorkshops(); 

修復了splice,如jwatts1980所示,將selectedWorkshop var移出循環,並且比較每個對象項目,而不是比較對象,因爲objects don't compare反轉循環。

JSFiddle Tweaked

JSFiddle Object Compare Example

+2

嘿,我認爲,因爲項目正在被從數組中刪除'for'循環也需要被反向遍歷。 'for(var j = workshops.length - 1; j> = 0; j - )' – jwatts1980