从删除/复制的对象中提取属性,然后分配给其他对象

Extract properties from deleted/duplicated objects then assign to other objects

本文关键字:对象 然后 分配 其他 属性 删除 复制 提取      更新时间:2023-09-26

我需要一点帮助,我有这个数组:

[
   {Code:13938, Country:699, Name:"Crocs", codeProduct:1}
   {Code:13952, Country:699, Name:"Polo Club", codeProduct:14}
   {Code:13952, Country:699, Name:"Polo Club", codeProduct:1}
   {Code:13952, Country:699, Name:"Polo Club", codeProduct:3}
   {Code:13953, Country:699, Name:"OZ", codeProduct:12}
   ....
]

我需要转换成这个:

[
   {Code:13938, Country:699, Name:"Crocs", codeProduct:1}
   {Code:13952, Country:699, Name:"Polo Club", codeProduct:"14, 1, 3" }
   {Code:13953, Country:699, Name:"Polo Club", codeProduct:12}
]

删除重复的对象并获取这些被删除对象的值没有问题。

var prodArray = [];
function uniq_fast(a) {
   var seen = {};
   var out = [];
   var len = a.length;
   var j = 0;
   for(var i = 0; i < len; i++) {
     var item = a[i].Codigo;
     if(seen[item] !== 1) {
           seen[item] = 1;
           out[j++] = a[i];
     }else{
        prodArray.push({Code:item, codeProduct:a[i].TipoProductoCodigo});
     }
   }
      return out;
   }

返回一个没有重复值的新对象数组,并将已删除对象的属性添加到新数组prodArray

// out return this:
[
  {Code:13938, Country:699, Name:"Crocs", codeProduct:1}
  {Code:13952, Country:699, Name:"Polo Club", codeProduct:"14, 1, 3" }
  {Code:13953, Country:699, Name:"Polo Club", codeProduct:12}

)

prodArr返回:

[
    {Code:13952, codeProduct:1}
    {Code:13952, codeProduct:3}
]

但是我如何将prodArray中的属性设置为保存无重复对象的新数组?

希望我已经说清楚了

您可以使用散列表作为Code的引用。

var data = [{ Code: 13938, Country: 699, Name: "Crocs", codeProduct: 1 },  { Code: 13952, Country: 699, Name: "Polo Club", codeProduct: 14 }, { Code: 13952, Country: 699, Name: "Polo Club", codeProduct: 1 }, { Code: 13952, Country: 699, Name: "Polo Club", codeProduct: 3 }, { Code: 13953, Country: 699, Name: "OZ", codeProduct: 12 }],
    grouped = [];
data.forEach(function (a) {
    if (!this[a.Code]) {
        this[a.Code] = { Code: a.Code, Country: a.Country, Name: a.Name, codeProduct: a.codeProduct };
        grouped.push(this[a.Code]);
        return;
    }
    this[a.Code].codeProduct += ', ' + a.codeProduct;
}, Object.create(null));
console.log(grouped);

我会尽我最大的努力回答这个问题,虽然我并不完全理解你想要做什么…

所以你在prodArray中有重复的值,很好。现在您想要将它们放回到您刚刚删除它们的数组中?确定。要将一个元素附加到数组的末尾,可以使用push方法。

我假设你赶上的事情是抓住那些缺失的JSON属性,CountryName,并将它们添加回prodArray中的元素。但由于我们知道Code是相同的,我们可以使用它来找到"缺失"的值。下面是我的做法,假设a是你的原始数组:

for (var i in prodArray) {
    // find the duplicate in the orginal array
    for (var j in a) {
        if (a[j].Code == prodArray[i].Code) {
            // found it, now append into a
            a.push(a[j]);
            break;
        }
    }
}

我接近了吗?