Move object from one array to another

核能气质少年 提交于 2019-12-06 03:45:33

This is the way You do it:

var array1 = [1, 2, 3, 4, 5];
var array2 = [];

array1.forEach(function(elem, index) {
  array1.splice(index, 1);
  array2.push(elem);
});

console.log(array1); //[2, 4]
console.log(array2); //[1, 3, 5]

This is an example of how it can be done:

var array1 = [1, 2, 3, 4, 5];
var array2 = [];

for(var i = 0; i < array1.length; i++) {
  array2.push(array1[i]);
  array1.splice(i, 1);
  i--; //decrement i IF we remove an item
}

console.log(array1); //[]
console.log(array2); //[1, 2, 3, 4, 5]

Specific use-case for you:

let messages = this.ticket.messages;
for(let i = 0; i < messages.length; i++) {
  let message = messages[i];
  if (message.type === "comment") {
    this.comments.push(message);
    messages.splice(i, 1);
    i--;
  }
}

You are removing elements as you loop through your array - this is never a good idea. A better way to solve this issue is to add them to this.comments first and when the foreach is finalized, start looping over this.comments and remove those that are in this array out of the messages.

Here we go the async way baby:

var array1 = [1, 2, 3, 4, 5];
var array2 = [];

async function fillArray() {
  array1.forEach(function(elem, index) {
    console.log("elem: ", elem)
    array2.push(elem); 
  })
}

async function emptyArray(){
  fillArray().then(() =>{
    array1.length = 0; 
 })
}

emptyArray().then(() => { 
  console.log("array1: ", array1); //[]
  console.log("array2: ", array2); //[1, 2, 3, 4, 5]
})

An another great move, conditional way, cheer:

var array1 = [1, 2, 3, 4, 5];
var array1Length= array1.length;
var array2 = [];
 
  array1.forEach((elem, index) => {
    array2.push(elem); 
    if(array2.length === array1Length) array1.length=0
  })
  
  console.log("array1: ", array1); //[]
  console.log("array2: ", array2); //[1, 2, 3, 4, 5] 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!