Sea
martie 26, 2020, 1:37pm
1
Salutare,
Cum pot sorta array-ul de mai jos dupa multiple conditii
[
{
"denumire":"Produs 1",
"stare1":"activ",
"stare2":"activ"
},
{
"denumire":"Produs 2",
"stare1":"activ",
"stare2":"inactiv"
},
{
"denumire":"Produs 3",
"stare1":"inactiv",
"stare2":"activ"
},
{
"denumire":"NON / Produs 4",
"stare1":"inactiv",
"stare2":"inactiv"
},
{
"denumire":"Produs 5",
"stare1":"activ",
"stare2":"activ"
},
{
"denumire":"Produs 6",
"stare1":"inactiv",
"stare2":"activ"
},
{
"denumire":"NON / Produs 7",
"stare1":"activ",
"stare2":"inactiv"
},
{
"denumire":"Produs 8",
"stare1":"inactiv",
"stare2":"inactiv"
}
]
Oridinea si conditiile de afisare sunt urmatoarele:
1: stare1 == activ && stare2 == activ
2: stare1 == activ && stare2 == inactiv
3: stare2 == activ && stare 1 == inactiv
4: stare1 == inactiv && stare2 == inactiv
5: denumire == /^NON./i (tot ce incepe cu NON) && (stare1 == activ && stare2 == activ) && (stare1 == activ && stare2 == inactiv)
Multumesc!
zshare
(Eduard-Dan Stănescu)
martie 26, 2020, 2:20pm
2
const items = [{ ... }, { ... }, { ... }];
// 1: stare1 == activ && stare2 == activ
let filtru_1 = items.filter(function(item) {
return item.stare1 === "activ" && item.stare2 === "activ";
});
// 2: stare1 == activ && stare2 == inactiv
// 3: stare2 == activ && stare 1 == inactiv
// 4: stare1 == inactiv && stare2 == inactiv
// 5: denumire == /^NON./i (tot ce incepe cu NON) && (stare1 == activ && stare2 == activ) && (stare1 == activ && stare2 == inactiv)
let filtru_5 = items.filter(function(item) {
return item.denumire.match(/^NON./i) && ((item.stare1 === "activ" && item.stare2 === "activ") || (item.stare1 === "activ" && item.stare2 === "inactiv"));
});
2, 3, 4 le faci singur.
Sea
martie 26, 2020, 2:43pm
3
Cu filter am incercat initail si am inceput cu conditia 5, dupa care am concatenat variabilele, numai ca array-ul meu si-a multiplicat obiectele, Produsul 7 intra in conditia 2 si 5.
Practic am nevoie de acelasi array, numai ca sortat in acea ordine.
let testArray = [
{
"denumire":"Produs 1",
"stare1":"activ",
"stare2":"activ"
},
{
"denumire":"Produs 2",
"stare1":"activ",
"stare2":"inactiv"
},
{
"denumire":"Produs 3",
"stare1":"inactiv",
"stare2":"activ"
},
{
"denumire":"NON / Produs 4",
"stare1":"inactiv",
"stare2":"inactiv"
},
{
"denumire":"Produs 5",
"stare1":"activ",
"stare2":"activ"
},
{
"denumire":"Produs 6",
"stare1":"inactiv",
"stare2":"activ"
},
{
"denumire":"NON / Produs 7",
"stare1":"activ",
"stare2":"inactiv"
},
{
"denumire":"Produs 8",
"stare1":"inactiv",
"stare2":"inactiv"
}
];
function orderPosition(data) {
if (data.denumire.match(/^NON./i) && ((data.stare1 === "activ" && data.stare2 === "activ") || (data.stare1 === "activ" && data.stare2 === "inactiv"))) {
return 5;
}
if (data.stare1 === 'activ' && data.stare2 === 'activ') {
return 1;
}
if (data.stare1 === 'activ' && data.stare2 === 'inactiv') {
return 2;
}
if (data.stare1 === 'inactiv' && data.stare2 === 'activ') {
return 3;
}
if (data.stare1 === 'inactiv' && data.stare2 === 'inactiv') {
return 4;
}
return 6;
}
console.log(testArray.sort(function(a, b) {
return orderPosition(a) - orderPosition(b);
}));
2 Likes