¿Cómo encontrar un valor único con id en JavaScript? ahora mismo estoy obteniendo sólo valor.
Me estoy poniendo:-
[
"Care One",
"Care Two"
]
Necesito:-
[
{
"Source_ID": 1,
"SourceName_CR": "Care One"
},
{
"Source_ID": 2,
"SourceName_CR": "Care Two"
}
]
Mi código:-
const body = [
{
Field_ID: 1,
FieldName_CR: "First Name",
Source_ID: 1,
SourceName_CR: "Care One"
},
{
Field_ID: 2,
FieldName_CR: "Last Name",
Source_ID: 1,
SourceName_CR: "Care One"
}, {
Field_ID: 3,
FieldName_CR: "Phone",
Source_ID: 2,
SourceName_CR: "Care Two"
},
{
Field_ID: 4,
FieldName_CR: "Email",
Source_ID: 2,
SourceName_CR: "Care Two"
}, ];
console.log([...new Set(body.map(item => item.SourceName_CR))]);
Un conjunto no funcionará aquí porque desea deduplicar objetos, pero los objetos no se pueden comparar entre sí de esa manera. Hacer solo .map(item => item.SourceName_CR) tampoco tiene sentido porque solo obtiene la cadena (por ejemplo Care Two ) y no todo el objeto que desea.
Agrupe los nombres de origen por ID de origen para deduplicar, luego convierta las entradas del objeto resultante en la estructura requerida.
const body = [
{
Field_ID: 1,
FieldName_CR: "First Name",
Source_ID: 1,
SourceName_CR: "Care One"
},
{
Field_ID: 2,
FieldName_CR: "Last Name",
Source_ID: 1,
SourceName_CR: "Care One"
}, {
Field_ID: 3,
FieldName_CR: "Phone",
Source_ID: 2,
SourceName_CR: "Care Two"
},
{
Field_ID: 4,
FieldName_CR: "Email",
Source_ID: 2,
SourceName_CR: "Care Two"
}, ];
const namesBySourceID = Object.fromEntries(
body.map(obj => [obj.Source_ID, obj.SourceName_CR])
);
const result = Object.entries(namesBySourceID)
.map(([Source_ID, SourceName_CR]) => ({ Source_ID, SourceName_CR }));
console.log(result);
Esto también funcionaría:
const body = [ { Field_ID: 1, FieldName_CR: "First Name", Source_ID: 1, SourceName_CR: "Care One", }, { Field_ID: 2, FieldName_CR: "Last Name", Source_ID: 1, SourceName_CR: "Care One", }, { Field_ID: 3, FieldName_CR: "Phone", Source_ID: 2, SourceName_CR: "Care Two", }, { Field_ID: 4, FieldName_CR: "Email", Source_ID: 2, SourceName_CR: "Care Two", }, ];
const uniqueItems = [];
body.forEach(({Source_ID, SourceName_CR}) => {
const found = uniqueItems.find(o => o.Source_ID === Source_ID);
if(!found){
uniqueItems.push({Source_ID, SourceName_CR});
}
})
console.log(uniqueItems);
const body = [
{
Field_ID: 1,
FieldName_CR: "First Name",
Source_ID: 1,
SourceName_CR: "Care One"
},
{
Field_ID: 2,
FieldName_CR: "Last Name",
Source_ID: 1,
SourceName_CR: "Care One"
}, {
Field_ID: 3,
FieldName_CR: "Phone",
Source_ID: 2,
SourceName_CR: "Care Two"
},
{
Field_ID: 4,
FieldName_CR: "Email",
Source_ID: 2,
SourceName_CR: "Care Two"
}, ];
const key = 'SourceName_CR';
const uniqValues = [...new Map(body.map(item =>[item[key], item])).values()];
const onlyIDandNames=uniqValues.map((item)=>({Source_ID:item?.Source_ID,SourceName_CR:item?.SourceName_CR}))
console.log(uniqValues)
console.log(onlyIDandNames)