gpt4 book ai didi

javascript - 使用 Array.Sort 而不使用数组中的两个值

转载 作者:行者123 更新时间:2023-11-28 11:44:23 25 4
gpt4 key购买 nike

我有一个像这样的数组:

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.7 。我无法更改版本。

我想从 AngularJS 中提取逻辑,然后对 javascript 中的数组进行排序,但我陷入困境,因为它根据数组中的值而不是另一个值进行排序。

例如,我已尝试使用自定义排序,但我只想一次比较一个索引。我不想循环遍历每一对事物来进行排序。我只想在函数中使用 a,而不是同时使用 ab

(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>

我希望下拉列表按从上到下的顺序排列一、三、二。有没有一种方法可以一次只对数组中的一个值使用 .sort ?并且只比较一次?

最佳答案

您可以在order中查找value的索引。如果 order 是一个 array 会更容易,但如果它必须是一个字符串,那么你仍然可以在字符串中查找索引.

let array = [{value: 1, text: "one"}, {value: 2, text: "two"}, {value: 3, text: "three"}];
let order = [1, 3, 2]; // '1,2,3' will also work

let sorted = array.sort((a, b) => order.indexOf(a.value) - order.indexOf(b.value));

console.log(sorted);

关于javascript - 使用 Array.Sort 而不使用数组中的两个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55815088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com