首页 > 解决方案 > 将项目添加到特定位置的数组

问题描述

我有一个数组

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。但结果会是香蕉、苹果、橙子。

标签: javascript

解决方案


你可以使用这样的东西:

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() 找到应该插入元素的适当索引。

https://30secondsofcode.org/


推荐阅读