【问题标题】:Extract properties from deleted/duplicated objects then assign to other objects从已删除/重复的对象中提取属性,然后分配给其他对象
【发布时间】:2016-08-11 18:15:14
【问题描述】:

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

[
   {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 中的属性设置到新的包含无重复对象的数组中?

希望我已经清楚了

【问题讨论】:

  • 似乎非常不一致...您将拥有一个可能包含字符串列表或单个数字的属性。
  • 您已将重复项移至 prodArray,并且要将它们添加回来?
  • 我不明白你的最后一个问题
  • uniq_fast函数中返回重复项,删除对象的一些值在prodArray中。

标签: javascript jquery arrays object


【解决方案1】:

您可以使用哈希表作为对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);

【讨论】:

    【解决方案2】:

    我会尽力回答这个问题,但不完全了解您要做什么......

    所以你在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;
    
            }
    
        }
    
    }
    

    我接近了吗?

    【讨论】:

    • 感谢 Danny 的回答,如果我不清楚,请见谅。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 2016-02-03
    相关资源
    最近更新 更多