javascript:找到正确的索引以将对象放置在已排序的对象数组中

标签 javascript arrays sorting

我有一个 getSortedIndex 函数。该函数接受以下参数:

  1. 按键排序的对象数组。
  2. 要插入数组的新对象。
  3. 所有对象排序所依据的键。
function getSortedIndex(array, objToInsert, key) {
    var low = 0,
    high = array.length,
    value = objToInsert[key];

    while (low < high) {
        var mid = (low + high) >>> 1;
        if (value > array[mid][key]) low = mid + 1;
        else high = mid;
    }
    return low;
}

当函数被调用时,它返回对象应该放入数组的索引:

var sorted_array_of_objects = [
    { 'x': 20 },
    // The new object will be placed here.
    { 'x': 30 },
    { 'x': 30 },
    { 'x': 40 },
    { 'x': 50 }
];
var objectToInsert = { 'x': 30, y: 10 };

getSortedIndex(sorted_array_of_objects, objectToInsert, 'x'); //=> 1


我的问题

您能否修改该函数,使其返回索引,该索引会将新对象放置在数组中 具有相同 x 属性值的对象之后?如果数组中没有对象具有相同的 x 属性值,则应返回正常排序索引。

这是一个演示:http://jsbin.com/sortedIndex/3/edit?javascript,console,output

最佳答案

看起来你所要做的就是改变比较

if (value > array[mid][key])

if (value >= array[mid][key])

这样可以不断比较具有相同值的元素。

关于javascript:找到正确的索引以将对象放置在已排序的对象数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21962287/

相关文章:

java - Java 集合排序

javascript - 聚合两个对象数组

java - 使用 Timer 显示字符串数组中的字符串

javascript - 从 Javascript 中的对象数组中按键查找重复值

javascript - 在 rpivottable 中分组排序

c++ - 将比较函数传递给 qsort C++

javascript - 我已将嵌套 Json 数据存储在变量中,如何在 jquery 的另一个函数中访问它们?

javascript - 将 Jquery AutoComplete 与字典列表结合使用

javascript - 如何过滤包含链接和纯文本的列表?

javascript - 脚本验证数字1-100