J'ai JSON comme celui-ci dans l'objet Array principal
[ { "id": "25", "section": "1", "sectionRange": [ { "sectionNumber": 1, "effectAllowed": "all", "Date": "", "items": [ { "subjectId": 25, "section": 1, "chapterId": 283, "actualWeightage": 3.42, "totalPaperMarks": 132, "title": "10-Creation & Registration of Charges", "$$hashKey": "object:146" }, { "subjectId": 25, "section": 1, "chapterId": 284, "actualWeightage": 2.23, "totalPaperMarks": 132, "title": "11-Allotment of Securities & Issue of Certificates", "$$hashKey": "object:147" }, { "subjectId": 25, "section": 1, "chapterId": 285, "actualWeightage": 1.37, "totalPaperMarks": 132, "title": "12-Membership in a Company", "$$hashKey": "object:148" }, { "subjectId": 25, "section": 1, "chapterId": 286, "actualWeightage": 3.42, "totalPaperMarks": 132, "title": "13-Transfer & Transmission of Securities", "$$hashKey": "object:149" }, { "subjectId": 25, "section": 1, "chapterId": 287, "actualWeightage": 7.53, "totalPaperMarks": 132, "title": "14-Institution of Directors", "$$hashKey": "object:150" }, { "subjectId": 25, "section": 1, "chapterId": 288, "actualWeightage": 1.37, "totalPaperMarks": 132, "title": "15-Independent Directors", "$$hashKey": "object:151" }, { "subjectId": 25, "section": 1, "chapterId": 289, "actualWeightage": 13.35, "totalPaperMarks": 132, "title": "16-Board & its Powers", "$$hashKey": "object:152" }, { "subjectId": 25, "section": 1, "chapterId": 290, "actualWeightage": 8.22, "totalPaperMarks": 132, "title": "17-Appointment & Remuneration of Key Managerial Personnel", "$$hashKey": "object:153" }, { "subjectId": 25, "section": 1, "chapterId": 291, "actualWeightage": 6.68, "totalPaperMarks": 132, "title": "18-General Meetings", "$$hashKey": "object:154" }, { "subjectId": 25, "section": 1, "chapterId": 292, "actualWeightage": 1.37, "totalPaperMarks": 132, "title": "19-Loans & Investments by Companies", "$$hashKey": "object:155" }
Je veux trier l'objet ci-dessus comme
alert(thisObj.scheduleSubject[0].sectionRange[0].items[0].title);
ce que j'ai essayé jusqu'à présent
$scope.checkWeightage=function(){ thisObj.scheduleSubject.map(itm=>itm.sectionRange.map(subItm=>{ var min = subItm.chapterActualWeightage-(subItm.chapterActualWeightage/10); var max = subItm.chapterActualWeightage+(subItm.chapterActualWeightage/10); var sum = subItm.items.reduce((total,it)=>{ return total+it.actualWeightage; },0); subItm['weightageError'] = (sum>max || sum<min)?true:false; subItm['ChapterActualWeightageCurrently'] = parseFloat(Math.round(sum*100)/100); subItm.items.sort((a,b)=>a.title.split(/_(.+)/)[0]>b.title.split(/_(.+)/)[0]); }) ); console.log(thisObj.scheduleSubject[0].chapterData); //.1[0].title); //console.log("CHECK weightage",thisObj.scheduleSubject); }
Comment suivre le titre sur mon tableau principal
obj = [{{"title":"1-Introduction"}, {"title":"4-Introduction"}, {"title":"5-Introduction"}, {"title":"20-Introduction"} }]
Je veux trier tous les éléments sur le base de ses chiffres de titre avant - exemple de caractère 1, 2, 3, 4, 5, 6, 21, 56 et ainsi de suite.
Structure du tableau principal
obj = [{{"title":"1-Introduction"}, {"title":"5-Introduction"}, {"title":"20-Introduction"}, {"title":"4-Introduction"} }]
3 Réponses :
Vous pouvez fractionner
sur ce caractère et trier via celui-ci (en supposant que votre structure de données principale soit nommée structure
:
structure.forEach(s => { s.sectionRange.forEach(sr => { sr.items.sort(function(a, b) { let aParts = a.split("-"), bParts = b.split("-"); return +aParts[0] - +bParts[0]; }); }); });
merci pour votre réponse je vais vérifier et vous faire savoir
Extrayez simplement ces valeurs numériques et laissez orderBy filter d'angularjs faire le travail à votre place
JS
<div ng-repeat="item in data | orderBy:getNumber:false">{{item.title}}</div>
html
$scope.getNumber = function(row){ var value = row.title.split("-")[0]; return parseInt(value); };
orderBy prend également un deuxième paramètre (vrai / faux) pour l'ordre asc / desc
pour des raisons de simplicité, je n'ai inclus que les éléments faisant partie de votre objet dans la démo
la réponse ci-dessus a résolu mon problème, mais j'ai également essayé votre méthode et j'obtiens une erreur. Le jeton 'orderBy' est un jeton inattendu à la colonne 17 de l'expression [container.items orderBy: getNumber (item): true] commençant à [orderBy: getNumber (item): true].
vous avez probablement copié quelque chose de mal, veuillez comparer votre code avec l'exemple fourni dans la démo plnkr. Aussi, si vous pouvez créer un plunker, je peux vous aider avec le débogage.
oui, je viens de voir l'exemple et maintenant ça marche aussi.
heureux d'avoir pu aider.
et je pense que cette méthode sera un moyen de tri plus lent par rapport à ce qui précède. ai-je raison?
Vous pouvez utiliser un Array.prototype.sort
avec une simple fonction sort
dans laquelle vous analysez la valeur title
de chaque objet du tableau comme un int et comparez . Quelque chose comme ceci:
var arr = [{ "title": "1-Introduction" }, { "title": "5-Introduction" }, { "title": "20-Introduction" }, { "title": "4-Introduction" } ]; arr.sort(function(a, b) { const aVal = parseInt(a.title.split("-")[0]); const bVal = parseInt(b.title.split("-")[0]); return aVal - bVal; }); console.log(arr);