2017-06-05 467 views
-2

我有這樣的JSON對象:得到重複的值在JSON對象的javascript(JQuery的)

[ 
    { 
     "idMaterial": "Alloy 450 (15Cr6Ni1.5Cu)_S45000", 
     "tipoMaterial": "Alloy 450 (15Cr6Ni1.5Cu)", 
     "uns": "S45000", 
     "temperatura": "NL", 
     "ph": "≥3,5", 
     "concetracionClMax": "NL", 
     "azufreElemental": "ND", 
     "tratamientoTermico": "Recocido + endurecimiento por envejecido a 620ºC", 
     "dureza": "31", 
     "comentarios": "Cualquier combinación ", 
     "origen": "NORMATIVA", 
     "idEnsayo": "", 
     "susceptibilidadSsc": null, 
     "tipoResultado": "A", 
     "ensayos": null, 
     "h2S": "0,103" 
    }, 
    { 
     "idMaterial": "AISI 415 (12Cr5NiMo)_S41500", 
     "tipoMaterial": "AISI 415 (12Cr5NiMo)", 
     "uns": "S41500", 
     "temperatura": "NL", 
     "ph": "≥3,5", 
     "concetracionClMax": "NL", 
     "azufreElemental": "ND", 
     "tratamientoTermico": "Austenitizado + templado + doble revenido", 
     "dureza": "23", 
     "comentarios": "Cualquier combinación de T y [Cl] en medios de producción es aceptable", 
     "origen": "NORMATIVA", 
     "idEnsayo": "", 
     "susceptibilidadSsc": null, 
     "tipoResultado": "A", 
     "ensayos": null, 
     "h2S": "0,103" 
    }, 
    { 
     "idMaterial": "13Cr4NiMo_S42400", 
     "tipoMaterial": "13Cr4NiMo", 
     "uns": "S42400", 
     "temperatura": "NL", 
     "ph": "≥3,5", 
     "concetracionClMax": "NL", 
     "azufreElemental": "No", 
     "tratamientoTermico": "Austenitizado + templado + doble revenido", 
     "dureza": "23", 
     "comentarios": "Cualquier combinación de T y [Cl] en medios de producción es aceptable", 
     "origen": "NORMATIVA", 
     "idEnsayo": "", 
     "susceptibilidadSsc": null, 
     "tipoResultado": "A", 
     "ensayos": null, 
     "h2S": "0,103" 
    }, 
    { 
     "idMaterial": "13Cr5Ni2Mo (Súper 13 Cr)_S41425", 
     "tipoMaterial": "13Cr5Ni2Mo (Súper 13 Cr)", 
     "uns": "S41425", 
     "temperatura": "NL", 
     "ph": "≥3,5", 
     "concetracionClMax": "NL", 
     "azufreElemental": "No", 
     "tratamientoTermico": "Austenitizado + templado + revenido", 
     "dureza": "28", 
     "comentarios": "Cualquier combinación de T y [Cl] en medios de producción es aceptable", 
     "origen": "NORMATIVA", 
     "idEnsayo": "", 
     "susceptibilidadSsc": null, 
     "tipoResultado": "A", 
     "ensayos": null, 
     "h2S": "0,103" 
    }, 
    { 
     "idMaterial": "13Cr5Ni2Mo (Súper 13 Cr)_S41426", 
     "tipoMaterial": "13Cr5Ni2Mo (Súper 13 Cr)", 
     "uns": "S41426", 
     "temperatura": "NL", 
     "ph": "≥3,5", 
     "concetracionClMax": "NL", 
     "azufreElemental": "No", 
     "tratamientoTermico": "Austenitizado + templado + revenido", 
     "dureza": "27", 
     "comentarios": "Grado máximo 105 Ksi. Cualquier combinación de T y [Cl] en medios de producción es aceptable", 
     "origen": "NORMATIVA", 
     "idEnsayo": "", 
     "susceptibilidadSsc": null, 
     "tipoResultado": "A", 
     "ensayos": null, 
     "h2S": "0,103" 
    }, 
    { 
     "idMaterial": "13Cr4Ni_S41429", 
     "tipoMaterial": "13Cr4Ni", 
     "uns": "S41429", 
     "temperatura": "NL", 
     "ph": "≥4,5", 
     "concetracionClMax": "NL", 
     "azufreElemental": "ND", 
     "tratamientoTermico": "templado + revenido o normalizado +revenido", 
     "dureza": "27", 
     "comentarios": "Grado máximo 120 Ksi .Cualquier combinación de T y [Cl] en medios de producción es aceptable", 
     "origen": "NORMATIVA", 
     "idEnsayo": "", 
     "susceptibilidadSsc": null, 
     "tipoResultado": "A", 
     "ensayos": null, 
     "h2S": "0,103" 
    } 
] 

而且,我想是讓所有具有相同的「idMaterial」和「UNS」值,重複的對象把它們放在其他物體上。感謝所有人(我沒有寫出所有的JSON數據,因爲它太長了)。

+0

你可以發佈你到目前爲止嘗試過的嗎? – matov

+0

這個問題的答案在這個鏈接:https://es.stackoverflow.com/questions/76231/obtener-los-objetos-que-se-repiten-en-un-array-de-objetos-json-con- javascript-j –

回答

0

var data = [{"id":"aaa","uns":"123"},{"id":"bbb","uns":"023"},{"id":"aaa","uns":"123"},{"id":"ccc","uns":"765"},{"id":"ddd","uns":"256"}]; 
 

 
var isEqualFunction = function(a, b){ 
 
    return a.id === b.id && a.uns === b.uns; 
 
} 
 

 
var compareFunction = function(a, b){ 
 
    return a.id === b.id 
 
    ? (a.uns === b.uns ? 0 : (a.uns < b.uns ? -1 : 1)) 
 
    : (a.id < b.id ? -1 : 1); 
 
} 
 

 
var arrayOrdenado = data.sort(compareFunction); 
 
var repetidos = []; 
 
for (var i = 0; i < arrayOrdenado.length - 1; i++) { 
 
    if (isEqualFunction(arrayOrdenado[i + 1], arrayOrdenado[i])) 
 
    { 
 
    repetidos.push(arrayOrdenado[i]); 
 
    } 
 
} 
 
console.log(repetidos);

另一種方式來做到這一點:

var data = [{"id":"aaa","uns":"123"},{"id":"bbb","uns":"023"},{"id":"aaa","uns":"123"},{"id":"ccc","uns":"765"},{"id":"ddd","uns":"256"}]; 
 

 
var compareFunction = function(a, b){ 
 
    return a.id === b.id 
 
    ? (a.uns === b.uns ? 0 : (a.uns < b.uns ? -1 : 1)) 
 
    : (a.id < b.id ? -1 : 1); 
 
} 
 

 
var arrayOrdenado = data.sort(compareFunction); 
 
var repetidos = []; 
 
for (var i = 0; i < arrayOrdenado.length - 1; i++) { 
 
    if (compareFunction(arrayOrdenado[i + 1], arrayOrdenado[i]) === 0) 
 
    { 
 
    repetidos.push(arrayOrdenado[i]); 
 
    } 
 
} 
 
console.log(repetidos);

這個問題被問和SO西班牙解決,這是鏈接它的https://es.stackoverflow.com/questions/76231/obtener-los-objetos-que-se-repiten-en-un-array-de-objetos-json-con-javascript-j

2

將您的對象變量,

var obj = [ 
    { 
     "idMaterial": "Alloy 450 (15Cr6Ni1.5Cu)_S45000", 
     "tipoMaterial": "Alloy 450 (15Cr6Ni1.5Cu)", 
     "uns": "S45000", 
     "temperatura": "NL", 
     "ph": "≥3,5", 
     "concetracionClMax": "NL", 
     "azufreElemental": "ND", 
     "tratamientoTermico": "Recocido + endurecimiento por envejecido a 620ºC", 
     "dureza": "31", 
     "comentarios": "Cualquier combinación ", 
     "origen": "NORMATIVA", 
     "idEnsayo": "", 
     "susceptibilidadSsc": null, 
     "tipoResultado": "A", 
     "ensayos": null, 
     "h2S": "0,103" 
    }, 
    { 
     "idMaterial": "AISI 415 (12Cr5NiMo)_S41500", 
     "tipoMaterial": "AISI 415 (12Cr5NiMo)", 
     "uns": "S41500", 
     "temperatura": "NL", 
     "ph": "≥3,5", 
     "concetracionClMax": "NL", 
     "azufreElemental": "ND", 
     "tratamientoTermico": "Austenitizado + templado + doble revenido", 
     "dureza": "23", 
     "comentarios": "Cualquier combinación de T y [Cl] en medios de producción es aceptable", 
     "origen": "NORMATIVA", 
     "idEnsayo": "", 
     "susceptibilidadSsc": null, 
     "tipoResultado": "A", 
     "ensayos": null, 
     "h2S": "0,103" 
    }, 
    { 
     "idMaterial": "13Cr4NiMo_S42400", 
     "tipoMaterial": "13Cr4NiMo", 
     "uns": "S42400", 
     "temperatura": "NL", 
     "ph": "≥3,5", 
     "concetracionClMax": "NL", 
     "azufreElemental": "No", 
     "tratamientoTermico": "Austenitizado + templado + doble revenido", 
     "dureza": "23", 
     "comentarios": "Cualquier combinación de T y [Cl] en medios de producción es aceptable", 
     "origen": "NORMATIVA", 
     "idEnsayo": "", 
     "susceptibilidadSsc": null, 
     "tipoResultado": "A", 
     "ensayos": null, 
     "h2S": "0,103" 
    }, 
    { 
     "idMaterial": "13Cr5Ni2Mo (Súper 13 Cr)_S41425", 
     "tipoMaterial": "13Cr5Ni2Mo (Súper 13 Cr)", 
     "uns": "S41425", 
     "temperatura": "NL", 
     "ph": "≥3,5", 
     "concetracionClMax": "NL", 
     "azufreElemental": "No", 
     "tratamientoTermico": "Austenitizado + templado + revenido", 
     "dureza": "28", 
     "comentarios": "Cualquier combinación de T y [Cl] en medios de producción es aceptable", 
     "origen": "NORMATIVA", 
     "idEnsayo": "", 
     "susceptibilidadSsc": null, 
     "tipoResultado": "A", 
     "ensayos": null, 
     "h2S": "0,103" 
    }, 
    { 
     "idMaterial": "13Cr5Ni2Mo (Súper 13 Cr)_S41426", 
     "tipoMaterial": "13Cr5Ni2Mo (Súper 13 Cr)", 
     "uns": "S41426", 
     "temperatura": "NL", 
     "ph": "≥3,5", 
     "concetracionClMax": "NL", 
     "azufreElemental": "No", 
     "tratamientoTermico": "Austenitizado + templado + revenido", 
     "dureza": "27", 
     "comentarios": "Grado máximo 105 Ksi. Cualquier combinación de T y [Cl] en medios de producción es aceptable", 
     "origen": "NORMATIVA", 
     "idEnsayo": "", 
     "susceptibilidadSsc": null, 
     "tipoResultado": "A", 
     "ensayos": null, 
     "h2S": "0,103" 
    }, 
    { 
     "idMaterial": "13Cr4Ni_S41429", 
     "tipoMaterial": "13Cr4Ni", 
     "uns": "S41429", 
     "temperatura": "NL", 
     "ph": "≥4,5", 
     "concetracionClMax": "NL", 
     "azufreElemental": "ND", 
     "tratamientoTermico": "templado + revenido o normalizado +revenido", 
     "dureza": "27", 
     "comentarios": "Grado máximo 120 Ksi .Cualquier combinación de T y [Cl] en medios de producción es aceptable", 
     "origen": "NORMATIVA", 
     "idEnsayo": "", 
     "susceptibilidadSsc": null, 
     "tipoResultado": "A", 
     "ensayos": null, 
     "h2S": "0,103" 
    } 
] 

使用.MAP功能來獲取領域。

function grabFields(item, index) { 
    var idMaterial = item.idMaterial; 
    var uns = item.uns; 
    return { 
     idMaterial: idMaterial, 
     uns: uns 
    } 
} 

將提取的值輸出到屏幕。

console.log(obj.map(grabFields)); 
+0

這個函數返回[Object,Object,Object,Object,Object,Object]。如何stringify obj?console.log(JSON.stringify((obj).map(grabFields))。如果我使用stringify我不能使用映射函數 –

+0

只要嘗試,'console.log(JSON.stringify(obj.map (grabFields)));' –

+0

對不起,我弄錯了這個問題,讓我們再次開始:P.這是我的JSON對象:var obj = [{「idMaterial」:「Alloy 450(15Cr6Ni1.5Cu)_S45000」,「tipoMaterial 「:」合金450(15Cr6Ni1.5Cu)「,」uns「:」S45000「,},{」idMaterial「:」13Cr5Ni2Mo(Sulper13Cr)_S41425「,」tipoMaterial「:」13Cr5Ni2Mo(Sulper13Cr) 「uns」:「S41425」,},{「idMaterial」:「13Cr5Ni2Mo(Súper13Cr)_S41425」,「tipoMaterial」:「13Cr5Ni2Mo(Súper13Cr)」,「uns」:「S41425」,},.. .etc];請參閱元素「idMaterial」:「13Cr5Ni2Mo(Súper13 Cr)_S41425」,我想要的是獲得帶有重複元素的JSON對象 –