我有一个数组
var arr = [];
,并希望在数组的开头或结尾添加项目。我将各项添加到MouseDown事件中,并检查Y值是较低还是较高。较低的值(Y)应该添加到开头,较高的值(Y)应该添加到结尾。
到目前为止,这可以通过Push()和Unshift()这样解决。第一个值为10(Y),第二个值为30(Y)。
arr.push(y);
if (arr[arr.length-1] < arr[arr.length-2]) {
arr.unshift("Apple");
} else if (arr[arr.length-1] > arr[arr.length-2]) {
arr.push("Orange");
}
我的问题是现在中间有一个值。例如,当我有这个时:
First value is 10(Y)
Second value is 30(Y)
Third value is 20(Y)
结果应该是Apple,Banana,Orange。但是结果将是Banane,Apple,Orange。
答案 0 :(得分:0)
您可以使用以下内容:
const sortedIndex = (arr, n) => {
const isDescending = arr[0] > arr[arr.length - 1];
const index = arr.findIndex(el => (isDescending ? n >= el : n <= el));
return index === -1 ? arr.length : index;
};
sortedIndex(arr, 20); // 1
sortedIndex([10, 30], 20); // 1
它将找到要将新值插入到哪个索引中。
返回应将值插入数组以保持其排序顺序的最低索引。
检查数组是否以降序排序(松散)。使用Array.prototype.findIndex()查找应该在其中插入元素的适当索引。