У меня есть такой массив:
var array = [{value: 1, text:"one"},{value: 2, text:"two"},{value: 3, text:"three"}]
и я хочу отсортировать его по этой переменной: var order = '1,3,2';
Это означает, что он будет иметь порядок 1,3,2
, где он упорядочен по свойству value
объекта в массиве.
Я использую его в массиве AngularJS ng-repeat
, но я не могу использовать пользовательское сравнение на orderBy
, потому что я использую версию 1.2.14 , и она вышла в 1.5 0,7 . Я не могу изменить версию.
Я думал о том, чтобы извлечь логику из AngularJS и просто отсортировать массив в javascript , но я застреваю, потому что он сортируется по значениям в массиве, а не по другому значению.
Например, я пробовал это с пользовательской сортировкой, но я хочу сравнивать только один индекс за раз. Я не хочу перебирать каждую пару вещей для сортировки. Я только хочу использовать a
из функции, а не оба a
и b
.
(function() {
var app = angular.module('test', []);
app.controller("test", function($scope) {
$scope.selectedOption = {};
$scope.availableOptions = [{
value: 1,
text: "one"
}, {
value: 2,
text: "two"
}, {
value: 3,
text: "three"
}];
$scope.availableOptions.sort(sortOptions);
});
var sortOptions = function(a, b) {
var sortBy = '1,3,2';
var values = sortBy.split(',');
for (val in values) {
v = parseInt(val);
if (v === a.value) {
return 0;
} else if (v < a.value) {
return -1;
} else if (v > a.value) {
return 1;
}
}
};
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.14/angular.min.js"></script>
<div ng-app="test" ng-controller="test">
<select ng-model="selectedOption.value">
<option ng-repeat="option in availableOptions" value="{{option.value}}">{{option.text}}</option>
</select>
</div>
Я бы хотел, чтобы в раскрывающемся списке было One, Three, Two
в таком порядке сверху вниз Есть ли способ использовать .sort
только с одним значением в массиве за раз? И сравните только один раз?