【问题标题】:How to find duplicate values in object and push in array to create distinct array of objects in Angular8 [duplicate]如何在对象中查找重复值并推入数组以在Angular8中创建不同的对象数组[重复]
【发布时间】:2023-03-19 09:15:01
【问题描述】:

我得到了来自 API 的响应,但我想对其进行格式化以进行迭代以达到正确的值。

在下面的对象中,我得到列 makeLineName 并基于此列,我想创建一个类型数组并将整个对象推送到类型数组上。

假设 ex - 在下面的响应中,我们有 2 个对象用于 "makeLineName":"Red",所以我想创建一个类型数组并推送所有对象在匹配 ma​​keLineName = Red 的类型数组中。就是这样。

const data = [{
"makeLineName":"Red",
"country":"Germany",
"processTypeId":"3",
"processTechType":"Batch & crunch"
},
{
"makeLineName":"Red",
"country":"Germany",
"processTypeId":"3",
"processTechType":"Batch"
},
{
"makeLineName":"Blue",
"country":"India",
"processTypeId":"3",
"processTechType":"Continues"
}
];

预期输出

const data = [{
"makeLineName":"Red",
"processTypeId":"3",
"country":"Germany",
"processTechType":"Batch & crunch"
types :[{
"makeLineName":"Red",
"processTypeId":"3",
"country":"Germany",
"processTechType":"Batch & crunch"
},
{
"makeLineName":"Red",
"processTypeId":"3",
"country":"Germany",
"processTechType":"Batch"
}]
},
{
"makeLineName":"Blue",
"country":"India",
"processTypeId":"3",
"processTechType":"Continues"
types :[{
"makeLineName":"Blue",
"country":"India",
"processTypeId":"3",
"processTechType":"Continues"
}

}];

我做了下面的代码,它工作正常,但它为类型创建了许多嵌套数组,因此我在使用循环迭代以获得类型数组的完美值时遇到问题。

getMakeLineMasterData() {
    const data = {
      data1: 'India'
    };  
    this.testfile.getWork(data).pipe(map(data => this.processData(data))).subscribe((resp: any) => {
      if (resp) {
        console.log(this.dataSource, "resp");
      }
    });
  }
  processData(data: any) {
    let mappedData = [];
    for (const item of data) {
      const mitem = mappedData.find(obj => obj.makeLineName == item.makeLineName);
      if (mitem) {
        mitem['types'].push(item);
      } else {
        let newItem = item;
        newItem['types'] = [item];
        mappedData.push(newItem);
      }
    }   
    return mappedData;
  }

现在我的代码正在工作并返回数据,但它也在为内部和内部的类型创建许多嵌套数组。 谁能帮我按照我的预期输出使其正确。

【问题讨论】:

    标签: javascript arrays json angular typescript


    【解决方案1】:

    问题:循环结构 您正在将数组推入内部。

    例如:

             let object1 = { property: [] , cat:1 }; 
             object1.property = [object1];
    or
           let object1 = { property: [object1]  }; 
    
            
            // here object1 is pointing to to itself, due to pass by reference.
           //that is why you are seeing a never ending nesting of itself (circular); 
    

    更正您的代码:

    let processData = (data: any)  => {
    let mappedData = [];
    for (const item of data) {
      const mitem = mappedData.find(obj => obj.makeLineName === item.makeLineName);
      if (mitem) {
        mitem['types'].push(item);
      } else {
        let newItem = { ... item }; //** creating a new object with copied properties
        newItem['types'] = [item];
        mappedData.push(newItem);
      }
    }    
    return mappedData; 
    }
    

    【讨论】:

    • 它工作正常,但这是否可以将所有项目推到顶部对象上,我们也在类型数组内推?像我预期的输出一样。?现在它正在推送 makeLine 对象下的所有元素并在 makeline 对象中创建类型数组。
    • 是否可以在 makeLine 对象之外为所有键创建一个对象,然后创建休息。你能看看我的预期输出吗?
    • 已更新,但重点是说it was working correct 是查看代码的一种不好的方式,无论是工作还是工作错误。如果你理解了答案,你就不会要求我为你做这么小的改变。
    猜你喜欢
    • 2019-08-23
    • 1970-01-01
    • 2016-04-17
    • 2018-08-13
    • 2020-01-24
    • 2020-02-15
    • 2019-04-28
    • 2021-11-14
    相关资源
    最近更新 更多