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 - Android parse.com 从数组中删除对象

arrays - 引用已排序数组对数组进行排序

php - 过滤和排序具有多个值的多维数组

javascript - 如何使用 React 在 Meteor App 中加载数据?

javascript - 隐藏的 <div> 中的动画背景图像不会加载或加载不是动画

MySql 如何向所有 PHP 用户发送消息

java - 二分/顺序搜索

mysql - 使用 CASE 后无法按超过 1 列对 sql 中的结果进行排序

javascript - 单击链接时停止拖动事件

javascript - Rails json View 转为 javascript 函数