Move object from one array to another

后端 未结 3 1071
暗喜
暗喜 2021-01-13 23:07

i have one object that one of the properties is an array of objects, the idea is to move objects from that array to no new one if one condition is true.

publ         


        
相关标签:
3条回答
  • 2021-01-13 23:51

    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] 

    0 讨论(0)
  • 2021-01-13 23:56

    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.

    0 讨论(0)
  • 2021-01-14 00:06

    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--;
      }
    }
    
    0 讨论(0)
提交回复
热议问题