2016-09-28 25 views
0
var arr = [ 
    {level:0,name:"greg"}, 
    {level:0,name:"Math"}, 
    {level:0,name:"greg"} 
]; 

我已經試過的數組中刪除重複的名稱如下:如何從對象

function removeDuplicates:(dataObject){ 
    self.dataObjectArr = Object.keys(dataObject).map(function(key){ 
     return dataObject[key]; 
    }); 

    for(var i= 0; i < self.dataObjectArr.length; i++){ 
     self.dataObjectArr[i]['name'] = self.dataObjectArr[i]; 

     self.uniqArr = new Array(); 
     for(var key in self.dataObjectArr){ 
      self.uniqArr.push(self.dataObjectArr[key]); 
     } 
    } 
    self.uniqObject = DataMixin.toObject(self.uniqArr); 
    return self.uniqObject; 
} 

,但我得到錯誤說:遺漏的類型錯誤:轉換圓形結構JSON。

+1

數學應該是數學嗎? – guest271314

+0

似乎你的函數聲明有一個':'here - >'function removeDuplicates:(dataObject)'? –

+0

您可以使用'下劃線'檢查這個答案http://stackoverflow.com/questions/9923890/removing-duplicate-objects-with-underscore-for-javascript – Davide

回答

2

你應該推name到一個數組或一組,檢查同一下面的..

var arr = [{ 
 
    level: 0, 
 
    name: "greg" 
 
}, { 
 
    level: 0, 
 
    name: "Math" 
 
}, { 
 
    level: 0, 
 
    name: "greg" 
 
}] 
 

 
function removeDuplicates(arr) { 
 
    var temp = [] 
 
    return arr.filter(function(el) { 
 
    if (temp.indexOf(el.name) < 0) { 
 
     temp.push(el.name) 
 
     return true 
 
    } 
 
    }) 
 
} 
 

 
console.log(removeDuplicates(arr))

+0

這是一個很好的ES5解決方案,你沒有'Set'。 – georg

+0

什麼是'temp.indexOf(el.name)<0'在做什麼? – Satyadev

+0

小於0平均值-1(未找到)??你能解釋一下 – Satyadev

2

這裏有一個通用的 「uniquify」 功能:

function uniqBy(a, key) { 
 
    var seen = new Set(); 
 
    return a.filter(item => { 
 
     var k = key(item); 
 
     return !seen.has(k) && seen.add(k) 
 
    }); 
 
} 
 

 
/// 
 

 
var arr = [ 
 
    {level:0,name:"greg"}, 
 
    {level:0,name:"greg"}, 
 
    {level:0,name:"joe"}, 
 
    {level:0,name:Math}, 
 
    {level:0,name:"greg"}, 
 
    {level:0,name:"greg"}, 
 
    {level:0,name:Math}, 
 
    {level:0,name:"greg"} 
 
]; 
 

 
uniq = uniqBy(arr, x => x.name); 
 
console.log(uniq);

了深入的討論,請參見here

0

我相信你有語法錯誤「removeDuplicates:(dataObject時) {... 「

應該是沒有 」:「 >> 」removeDuplicates(dataObject時){...「 」

你可以試試這個:

function removeDuplicates(arr){ 
    var match={}, newArr=[]; 
    for(var i in arr){ if(!match[arr[i].name]){ match[arr[i].name]=1; var newArr=i; } } 
    return newArr; 
} 

arr = removeDuplicates(arr); 
0

您可以使用$.unique()$.map()$.grep()

var arr = [ 
    {level:0,name:"greg"}, 
    {level:0,name:"Math"}, 
    {level:0,name:"greg"} 
]; 

var res = $.map($.unique($.map(arr, el => el.name)), name => 
      $.grep(arr, el => el.name === name)[0]); 

的jsfiddle https://jsfiddle.net/4tex8xhy/3

0

或者你也可以使用這樣的庫,下劃線或lodash(https://lodash.com/docs/4.16.2)。 Lodash示例:

var arr = [ 
    {level:0,name:"greg"}, 
    {level:0,name:"Math"}, 
    {level:0,name:"greg"} 
]; 

var result = _.map(_.keyBy(arr,'name')); 

//result will contain 
//[ 
// { 
// "level": 0, 
// "name": "greg" 
// }, 
// { 
// "level": 0, 
// "name": "Math" 
// } 
//] 

Ofc。在這些任務中總要考慮的一件事是,你想要做什麼:修改現有的數組,或者重新獲得一個新的數組。這個例子返回一個新的數組。