gpt4 book ai didi

javascript - 反向排序数组的 sortedIndex?

转载 作者:行者123 更新时间:2023-11-29 19:11:37 26 4
gpt4 key购买 nike

好像lodash的sortedIndex期望一个正向排序的数组用于它的二进制搜索工作。 (例如 [0,1,2,4])

有没有办法在数组反向排序时使用sortedIndexBy? (例如 [4,2,1,0])?

> _.sortedIndex( [0,1,2,4], 3 )
> 3
> _.sortedIndex( [4,2,1,0], 3 )
> 4

现在要让它工作,我必须反转数组,找到 sortedIndex,插入新元素,然后取消反转数组。


注意——需要一些可以对字符串和数字进行排序的东西。

['A','B','D']['D','B','A'] 并插入 ' C'.

最佳答案

_.sortedIndexBy怎么样? ?

已编辑:对于 string 比较,String.prototype.charCodeAt()可以帮助您将其转换为 Number,然后可以应用相同的逻辑。

const arr1 = [0, 1, 2, 4];
const arr2 = [4, 2 ,1, 0];

console.log(_.sortedIndex(arr1, 3 ));
// Similar, but with ranking function.
console.log(_.sortedIndexBy(arr2, 3, function(x) {return -x;}));

const charArr = ['D','B','A'];
// Take the first char and convert to Number
let index = _.sortedIndexBy(charArr, 'C', function(x) {
// Type checks. (If you want it to be general to many types..
if (typeof x === 'string') {
return -x.charCodeAt(0);
} else if (typeof x === 'number') {
return -x;
} // else ... for other types.....
});

console.log('To insert char C, put it to index: ', index);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>

或通过 _.sortedIndex , 它也有 iteratee 排在 4.0.0 之前

    const arr1 = [0, 1, 2, 4];
const arr2 = [4, 2 ,1, 0];

console.log(_.sortedIndex(arr1, 3));
console.log("Reversed order without ranking func: ",_.sortedIndex(arr2, 3));
// Ranking function to inverse the order.
console.log("Reversed order with ranking func: ",_.sortedIndex(arr2, 3, function(x) {return -x;}));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/1.3.1/lodash.min.js"></script>

感谢 pilau:sortedIndex 期望数组是正向排序的,所以我们不能只放入反向排序的数组并得到 arr.length - index,为了处理不同的情况,我认为我们需要做

  • 反转数组 -> 获取排序索引并放入 -> 再次反转它。或
  • 通过切片和反向获取反向副本 -> 获取排序索引并通过 arr.length - index 计算 -> 插入到原始数组。

达到预期的效果。

关于javascript - 反向排序数组的 sortedIndex?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38448568/

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