在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();