我有一个对象,其中一个属性是一个对象数组,想法是如果一个条件为真,将对象从该数组移动到没有新对象。
public $onInit(): void {
this.getTicket();
}
public ticket: any; // Object with the array
public comments: any = []; // New array to move the elements
public getTicket(): void {
this.ticketService
.getTicketComplete(this.$stateParams.ticketID)
.then((response: any) => {
this.ticket = response;
this.stringToDate(this.ticket);
this.ticket.messages.forEach((elem, index) => {
if (elem.type === "comment") {
this.ticket.messages.splice(index, 1);
this.comments.push(elem);
}
});
console.log(this.ticket);
});
}
我遇到的问题是下一个问题:数组必须包含对象类型,消息和注释,如果数组有2条消息和3条注释,它应该推送到新数组3条注释并留下2条消息,但只移动2条评论。
任何的想法。谢谢你的帮助。
这就是你这样做的方式:
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]
这是一个如何完成它的例子:
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]
特定用例:
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--;
}
}
您在循环遍历数组时删除元素 - 这绝不是一个好主意。解决此问题的更好方法是首先将它们添加到this.comments,并在foreach完成时,开始循环遍历this.com并从消息中删除此数组中的那些。
在这里,我们去异步方式宝贝:
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]
})
另一个伟大的举动,有条件的方式,欢呼:
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]