基于for循环迭代拼接数组

Splicing Array Based on For Loop Iteration

我正在尝试获取一个数组 ('selectedWorkshops'),并将其中的对象移动到 'registeredWorkshops'。然后,我还想从 'selectedWorkshops' 和另一个简称为 'workshops' 的数组中删除这些对象。

在这里查看我的代码笔: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' 和 '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();

为什么对象没有按照应有的方式从 'workshop' 和 'selectedWorkshops' 数组中正确拼接出来?我做错了什么?

"The splice() method adds/removes items to/from an array, and returns the removed item(s)." 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, moved the selectedWorkshop var out of the loop, and compared each object item, rather than comparing objects, since objects don't compare 的建议反转了循环。

JSFiddle Tweaked

JSFiddle Object Compare Example