如何比较 Angular 中两个对象的值

How to compare values of two objects in Angular

我在单击表单中的添加新按钮时动态推送行。 新数据将以对象的形式添加到oldData数组中。

我想将 newData 对象的所有值与 oldData 数组匹配, 如果具有相同值的 newData 对象在对象的 oldData 数组中可用,则代码将控制错误,否则它会推送该行。

任何人都可以帮助我使我的功能正常工作。

我是这样做的:

private allElementExists(newData: any[], oldData: any[]): boolean {
    for (const item of newData) {
        var verifyItem = oldData.find(x => x.id === item.id);
        if (verifyItem === undefined) {
            return false;
        }
    }
    return true;
}

这里有一个函数可以比较您在问题中提出的两个对象

这是 stackblitz 中使用此 function

的示例

https://stackblitz.com/edit/angular-xscnkf?file=src%2Fapp%2Fapp.component.html

如果oldData保留了多个对象,你可以这样做: if(!oldData.includes(newData))

编辑 1(描述中的原始代码):如果两者都只是单个对象,则简单比较即可: if(oldData! = newData)

编辑 2(描述中的编辑代码):

addNewType(rowdata) {
    const newData = JSON.stringify(rowdata.value);
    const oldData = JSON.stringify(this.items.value);
    if(oldData.includes(newData)){
        console.log('This element already exists in the detail list');
    }
    else this.addItem(this.createItem(null));           
}

编辑 3:如果 oldData 至少有两次 newData

addNewType(rowdata) {
    const newData = JSON.stringify(rowdata.value);
    const oldData = JSON.stringify(this.items.value);
    if((oldData.split(newData).length - 1) >= 2){
        console.log('This element already exists in the detail list at least TWICE');
    }
    else this.addItem(this.createItem(null));           
}

或:

addNewType(rowdata) {
    const newData = JSON.stringify(rowdata.value);
    const oldData = JSON.stringify(this.items.value);
    let newReg= new RegExp(newData, "g");
    if((oldData.match(newReg) || []).length >= 2){
        console.log('This element already exists in the detail list at least TWICE');
    }
    else this.addItem(this.createItem(null));           
}