簡體   English   中英

基於For循環迭代的拼接數組

[英]Splicing Array Based on For Loop Iteration

我正在嘗試采用一個數組(“ selectedWorkshops”),並將其中的對象移動到“ registeredWorkshops”。 然后,我也想從“ selectedWorkshops”和另一個名為“ workshops”的數組中刪除這些對象。

在此處查看我的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 = [];

應該將研討會移至“已注冊工作坊”並將其從“ selectedWorkshops”和“ workshops”中刪除的功能:

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();

為什么沒有像應有的那樣從“車間”和“ selectedWorkshop”陣列中正確剪接對象? 我究竟做錯了什么?

“ 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從循環中移出,並比較了每個對象項,而不是比較對象,因為對象不進行比較

JSFiddle進行了調整

JSFiddle對象比較示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM