如何将json数组中的重复值附加到另一个数组?不从数组中删除

时间:2015-08-04 10:47:11

标签: javascript arrays

此数组(catalog)包含重复值。我需要将重复值附加到数组。

此处重复条目按类别和名称进行检查。

var catalog = {
  products : [
      { category: 'fos', name: 'retek' },
      { category: 'fos', name: 'item' },
      { category: 'nyedva', name: 'blabla' },
      { category: 'fos', name: 'retek' },
  ]
};
var categories = [];

$.each(catalog.products, function(index, value) {
  if ($.inArray(value.category, categories) == -1) { 
    //do nothing
  } else {

    if ($.inArray(value.name, categories) == -1) {   
      //do nothing
    } else {
      //add duplicate values to array
      categories.push(value.name);    
    }
  }
});

console.log(categories);

DEMO

3 个答案:

答案 0 :(得分:1)

var catalog={
    products : [
        { category: 'fos', name: 'retek' },
        { category: 'fos', name: 'item' },
        { category: 'nyedva', name: 'blabla' },
        { category: 'fos', name: 'retek' },
    ]
};

var categories = [],
    duplicates = [];

$.each(catalog.products, function(index, obj) {
    var key = JSON.stringify(obj);
    if (categories[key] === undefined) {
        categories[key] = obj;
    } else {
        duplicates[key] = obj;
    }
});

duplicates = Object.keys(duplicates).map(function (key) {
    return duplicates[key]
});

console.log(categories);
console.log(duplicates);
console.log(duplicates.length);
console.log(duplicates[0]);

demo

答案 1 :(得分:1)

Fiddle

var catalog={
    products : [
        { category: 'fos', name: 'retek' },
        { category: 'fos', name: 'item' },
        { category: 'nyedva', name: 'blabla' },
        { category: 'fos', name: 'retek' },
    ]
};
var categories = [],
    uniqueCategories = [];

for (var i=0 ; i< catalog.products.length; i++) {
    var currProduct = catalog.products[i];
    if (uniqueCategories.length){
        for(var j=0; j< uniqueCategories.length; j++) {
           if(currProduct.category === uniqueCategories[j].category && currProduct.name === uniqueCategories[j].name){
            categories.push(currProduct)
           }
       }
   } else {
    uniqueCategories.push(currProduct)
   }
}

console.log(categories);

答案 2 :(得分:0)

不太确定你需要什么,但据我所知,请尝试以下代码。

var duplicates = catalog.products.filter(function(item){
  return catalog.products.some(function(i){
    return i.category == item.category;
  });
})