我有一个 getSortedIndex
函数。该函数接受以下参数:
- 按键排序的对象数组。
- 要插入数组的新对象。
- 所有对象排序所依据的键。
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/