2013-07-24 29 views
0

我想一個數組,將獲取我複製JSON 防爆的鍵:得到重複的鍵名JSON jQuery的

var catalog=[ 
     { ip: 'ipId_1', name: '192.160.121.11' }, 
     { ip: 'ipId_dyn_1_0', name: '192.160.121.12' }, 
     { ip: 'ipId_dyn_1_1', name: '192.160.121.12' } 
    ]; 

由於192.160.121.12被重複,我要像[ipId_dyn_1_0,ipId_dyn_1_1]數組,

到目前爲止已經試過(Fiddle Demo):

var categories =[]; 
var dup= []; 

$.each(catalog, function(index, value) { 
    console.log(categories+''+value.name); 
    if ($.inArray(value.name, categories) == -1) { 
     categories.push(value.name); 
    }else{ 
     dup.push(value.ip); 
     console.log(value.ip); 
    } 
}); 

console.log(categories); 
console.log(dup); 
+0

不作爲回答因爲你已經指定jQuery,但我建議你看看underscore.js,這對於像這樣的東西很好。例如:http://jsfiddle.net/gYyWd/ – pawel

回答

0
var cat_inverted = {}, categories = []; 
$.each(catalog, function(index, value) { 
    if (cat_inverted[value.name]) { 
     cat_inverted[value.name].push(value.ip); 
    } else { 
     cat_inverted[value.name] = [value.ip]; 
     categories.push(value.name); 
    } 
}); 
var dup = []; 
for (var name in cat_inverted) { 
    if (cat_inverted[name].length > 1) { 
     $.each(cat_inverted[name], function(i, ip) { 
      dup.push(ip); 
     }); 
    } 
} 
+0

嘿,你的代碼看起來不適用於某些json值 請檢查此http://jsfiddle.net/3wHfB/105/ 如果json對象: var catalog = {0:0'officeGroupName_1',name:' de2'}, {ip:'officeGroupName_3',name:'de2'} ]; 它很好,但有一個「 - 」。不工作。請幫助 –

+0

'de2'和'de2-'不是彼此重複。 – Barmar

+1

對不起,我很後悔。 –

0

檢查:

var catalog=[ 
     { ip: 'ipId_1', name: '192.160.121.11' }, 
     { ip: 'ipId_dyn_1_0', name: '192.160.121.12' }, 
     { ip: 'ipId_dyn_1_1', name: '192.160.121.12' } 
    ]; 

var my = {}; 
var dup = []; 

$.each(catalog, function(index, value) { 
    if(!!!my[value.name]) { 
     my[value.name] = []; 
    } 
    my[value.name].push(value.ip);  
}); 

$.each(my, function(index, value) { 
    if(value.length > 1) { 
     $.each(my[index], function(i, val) { 
      dup.push(val); 
     }); 
    }  
}); 

console.log(dup); 

jsfiddle

+0

什麼是'!!!'? – Barmar

+0

@Barmar,檢查undefinded – YD1m

+0

不會''我的[value.name]'做同樣的事情嗎? – Barmar

0

如果使用這樣的:

var catalog=[ 
     { ip: 'ipId_1', name: '192.160.121.11' }, 
     { ip: 'ipId_dyn_1_0', name: '192.160.121.12' }, 
     { ip: 'ipId_dyn_1_1', name: '192.160.121.12' } 
    ]; 
var values = {}; 

$.each(catalog, function(index, data) { 
    var name = data.name; 
    if(typeof values[name] == 'undefined') values[name] = []; 
    values[name].push(data.ip); 
}); 
var dupes = []; 
$.each(values,function(name,indexes) { 
    if(indexes.length > 1) 
    { 
     dupes.push(indexes); 
    } 
}); 
console.dir(dupes); 

受騙者現在包含數組(套重複的)

給它一個運行,看看它是如何工作的亞

數組
0

我會使用lodash.js或underscore.js來完成此任務,因爲fu nctional方法。使用此方法時,您可以更靈活地更改任務。 您可以將數據存儲在變量中,稍後可以輕鬆地將它們轉換爲所需的數據結構。

var catalog=[ 
     { ip: 'ipId_1', name: '192.160.121.11' }, 
     { ip: 'ipId_dyn_1_0', name: '192.160.121.12' }, 
     { ip: 'ipId_dyn_1_1', name: '192.160.121.12' } 
    ]; 
var categoriesObjectsUniqe =[]; 
var categories =[]; 

var dupObjects= []; 
var dup= []; 

categoriesObjectsUniqe = _.unique(catalog, 'name'); 
categories = _.map(categoriesObjectsUniqe, function(val) { 
      return val.name; }) 

dupObjects = _.filter(catalog, function(current) { 
    return arr = _.filter(catalog, function(currentInner) { 
     return currentInner.name === current.name; }).length > 1; 
}); 
dup = _.map(categoriesObjUniqe, function(val) { 
      return val.ip; }) 

console.log('uniqe Objects :'); 
console.log(categoriesObjectsUniqe); 

console.log('uniqe IPs :'); 
console.log(categories); 

console.log('duplicate Objects :'); 
console.log(dupObjects); 

console.log('duplicate ips :'); 
console.log(dup); 

這是這個小提琴。 http://jsfiddle.net/3wHfB/94/