在javascript数组中插入项并排序

在javascript数组中插入项并排序,javascript,Javascript,假设我有一个数组 var test = new Array() 测试中的值为3,6,9,11,20 如果我有一个变量 var id = 5 如何在数组中的3和6之间插入5? 或者我只是将其插入任意位置,然后对数组进行排序 提前谢谢 编辑: 我有以下代码: function gup( filter ) { filter = filter.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); var regexS = "[\\?&]"+fi

假设我有一个数组

var test = new Array()
测试中的值为3,6,9,11,20

如果我有一个变量

var id = 5
如何在数组中的3和6之间插入5? 或者我只是将其插入任意位置,然后对数组进行排序

提前谢谢

编辑:

我有以下代码:

function gup( filter )
{
  filter = filter.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+filter+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

var queryString = gup("SelectedID");


var hrefs = new Array();
$('.table404').children().children().each(function(){
var link = ($(this).find('a').attr('href'));
var startIndex = link.indexOf(",'");
var endIndex = link.indexOf("');");
if ( startIndex >= 0 && endIndex >= 0 ) {
var linkID = link.substring( startIndex+2, endIndex );
hrefs.push(linkID);
hrefs.push(queryString);
hrefs.sort()
}
alert(hrefs);
});
对于插入到数组中的每个项目,我都会收到一个ID为的警报,但对于每个项目,我都会得到一个1(当前queryString值),因此最后一个弹出窗口类似于 1,1,1,1,1,2,4,6,7,8


为什么插入阵列的每个项目都会出现新的弹出窗口?对于插入到数组中的每个其他项,我都会获得一次querystring值。要获得一个完整数组的弹出窗口,我需要做什么?

如果数组足够大,可以使用二进制searach查找插入点: 下面是一个带有测试的快速代码。(警告:未彻底测试)。此外,该数组必须是已排序的数组。 获得插入点后,只需使用Array.splice函数在该索引处插入即可

/**
 * Find insertion point for a value val, as specified by the comparator 
 * (a function)
 * @param sortedArr The sorted array
 * @param val The value for which to find an insertion point (index) in the array
 * @param comparator The comparator function to compare two values
 */
function findInsertionPoint(sortedArr, val, comparator) {   
   var low = 0, high = sortedArr.length;
   var mid = -1, c = 0;
   while(low < high)   {
      mid = parseInt((low + high)/2);
      c = comparator(sortedArr[mid], val);
      if(c < 0)   {
         low = mid + 1;
      }else if(c > 0) {
         high = mid;
      }else {
         return mid;
      }
      //alert("mid=" + mid + ", c=" + c + ", low=" + low + ", high=" + high);
   }
   return low;
}

/**
 * A simple number comparator
 */
function numComparator(val1, val2)  {
   // Suggested b @James
   return val1 - val2;
}

// TESTS --------------------------------

var arr = [0,1,3,6,9,11,20];
var idx = findInsertionPoint(arr, 2, numComparator);
arr.splice(idx, 0, 2);
alert(arr); // will alert [0,1,2,3,6,9,11,20]

var arr2 = [0,1,3,6,9,11,20];
var idx2 = findInsertionPoint(arr2, -1, numComparator);
arr2.splice(idx2, 0, -1);
alert(arr2); // will alert [-1,0,1,3,6,9,11,20]

你能把这些问题分成两个独立的问题吗?第二部分似乎与第一部分有点相关,但这样您可能会得到更好的答案。
test.push(2.sort()
不起作用,因为
push
方法返回数组的新长度。它应该分两步完成,例如:
test.push(2);test.sort()
:)FWIW您的
numComparator
函数可以简化为
返回val1-val2
test.push(2); test.sort();