2016-06-16 20 views
-1

我需要改变这个数组在Javascript:的Javascript:在阵列检测重复值和删除的第一个,如果只有一个字段的更改

[{"catalog_ref":"OFFER230","level_order":4}, 
{"catalog_ref":"OFFER231","level_order":4}, 
{"catalog_ref":"OFFER232","level_order":4}, 
{"catalog_ref":"OFFER233","level_order":4}, 
{"catalog_ref":"OFFER234","level_order":4}, 
{"catalog_ref":"OFFER235","level_order":5}, 
{"catalog_ref":"OFFER236","level_order":5}, 
{"catalog_ref":"OFFER232","level_order":5}, 
{"catalog_ref":"OFFER233","level_order":5}, 
{"catalog_ref":"OFFER234","level_order":5}] 

为了这个数组:

[{"catalog_ref":"OFFER230","level_order":4}, 
{"catalog_ref":"OFFER231","level_order":4}, 
{"catalog_ref":"OFFER235","level_order":5}, 
{"catalog_ref":"OFFER236","level_order":5}, 
{"catalog_ref":"OFFER232","level_order":5}, 
{"catalog_ref":"OFFER233","level_order":5}, 
{"catalog_ref":"OFFER234","level_order":5}] 

我已经尝试了很多东西,我没有找到解决方案。有人能帮我吗 ?我需要保持这种顺序的新数组中

+0

删除第一个或保留最后一个,如果用相同的catalog_ref – Redu

+0

喜热度存在更多的则2个对象,你有没有在JavaScript的例子吗? – nubuk29

回答

2

您可以forEach

var ar = [{"catalog_ref":"OFFER230","level_order":4},{"catalog_ref":"OFFER231","level_order":4},{"catalog_ref":"OFFER232","level_order":4},{"catalog_ref":"OFFER233","level_order":4},{"catalog_ref":"OFFER234","level_order":4},{"catalog_ref":"OFFER235","level_order":5},{"catalog_ref":"OFFER236","level_order":5},{"catalog_ref":"OFFER232","level_order":5},{"catalog_ref":"OFFER233","level_order":5},{"catalog_ref":"OFFER234","level_order":5}]; 
 
var result = []; 
 

 
ar.forEach(function(e) { 
 
    if (!this[e.catalog_ref]) { 
 
    this[e.catalog_ref] = e; 
 
    result.push(this[e.catalog_ref]); 
 
    } 
 
    this[e.catalog_ref].level_order = e.level_order; 
 
}, {}) 
 

 
console.log(result)

0

做到这一点确定这一个并通过消除受骗者,保持最后一个对象的工作(覆盖以前)

var data = [{"catalog_ref":"OFFER230","level_order":4},{"catalog_ref":"OFFER231","level_order":4},{"catalog_ref":"OFFER232","level_order":4},{"catalog_ref":"OFFER233","level_order":4},{"catalog_ref":"OFFER234","level_order":4},{"catalog_ref":"OFFER235","level_order":5},{"catalog_ref":"OFFER236","level_order":5},{"catalog_ref":"OFFER232","level_order":5},{"catalog_ref":"OFFER233","level_order":5},{"catalog_ref":"OFFER234","level_order":5}], 
 
    hash = data.reduce((p,c) => (p[c.catalog_ref] = c,p),{}); 
 
    result = Object.keys(hash).map(k => hash[k]); 
 
console.log(result)

而且我认为做同样工作的更合适的方法是利用Map对象如下;

var data = [{"catalog_ref":"OFFER230","level_order":4},{"catalog_ref":"OFFER231","level_order":4},{"catalog_ref":"OFFER232","level_order":4},{"catalog_ref":"OFFER233","level_order":4},{"catalog_ref":"OFFER234","level_order":4},{"catalog_ref":"OFFER235","level_order":5},{"catalog_ref":"OFFER236","level_order":5},{"catalog_ref":"OFFER232","level_order":5},{"catalog_ref":"OFFER233","level_order":5},{"catalog_ref":"OFFER234","level_order":5}], 
 
    result = [...data.reduce((p,c) => p.set(c.catalog_ref,c),new Map()).values()]; 
 
console.log(result);

0

var myArray = [{ 
 
    "catalog_ref": "OFFER230", 
 
    "level_order": 4 
 
}, { 
 
    "catalog_ref": "OFFER231", 
 
    "level_order": 4 
 
}, { 
 
    "catalog_ref": "OFFER232", 
 
    "level_order": 4 
 
}, { 
 
    "catalog_ref": "OFFER233", 
 
    "level_order": 4 
 
}, { 
 
    "catalog_ref": "OFFER234", 
 
    "level_order": 4 
 
}, { 
 
    "catalog_ref": "OFFER235", 
 
    "level_order": 5 
 
}, { 
 
    "catalog_ref": "OFFER236", 
 
    "level_order": 5 
 
}, { 
 
    "catalog_ref": "OFFER232", 
 
    "level_order": 5 
 
}, { 
 
    "catalog_ref": "OFFER233", 
 
    "level_order": 5 
 
}, { 
 
    "catalog_ref": "OFFER234", 
 
    "level_order": 5 
 
}] 
 

 
myArray.reverse(); 
 
for (i = 0; i < myArray.length; i++) { 
 
    for (j = i + 1; j < myArray.length; j++) { 
 
    if (myArray[i].catalog_ref == myArray[j].catalog_ref) { 
 
     myArray.splice(j, 1); 
 
     j--; 
 
    } 
 
    } 
 
} 
 
myArray.reverse(); 
 
console.log(myArray);

请尝试这一个。

+0

它的功能就像一个魅力! – nubuk29

0

您可以使用Array#reduceRight来向后循环并按照所需顺序构建一个数组。

var data = [{ "catalog_ref": "OFFER230", "level_order": 4 }, { "catalog_ref": "OFFER231", "level_order": 4 }, { "catalog_ref": "OFFER232", "level_order": 4 }, { "catalog_ref": "OFFER233", "level_order": 4 }, { "catalog_ref": "OFFER234", "level_order": 4 }, { "catalog_ref": "OFFER235", "level_order": 5 }, { "catalog_ref": "OFFER236", "level_order": 5 }, { "catalog_ref": "OFFER232", "level_order": 5 }, { "catalog_ref": "OFFER233", "level_order": 5 }, { "catalog_ref": "OFFER234", "level_order": 5 }], 
 
    result = data.reduceRight(function (temp) { 
 
     return function (r, a) { 
 
      if (temp[a.catalog_ref]) { 
 
       return r; 
 
      } 
 
      temp[a.catalog_ref] = true; 
 
      return [a].concat(r); 
 
     } 
 
    }(Object.create(null)), []); 
 

 
console.log(result);

相关问题