javascript - 根据行的值将行拼接到索引处的 Javascript 对象中

标签 javascript jquery arrays

如果我有一个如下所示的 JavaScript 对象:

{
  0: [0,50],
  1: [25,50],
  2: [148,60]
}

如何根据值在索引处插入新行?

例如如果我希望插入的行包含数据 [122,65],我需要测试值“122”与所有行的第一个值,然后在返回的索引处“拼接”该行。不应考虑每行的第二个值(上例中的 50,50,50)。在这种情况下,新数据应作为第 2 行插入,因为它小于 148 且大于 25...之前的第 2 行现在变为第 3 行。

今天我一直在四处寻找这个问题的答案,并偶然发现了以下代码,它暗示了我所追求的功能类型,但在这种情况下不太有效,因为如果我的理解是正确的,它仅比较单个数字。

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)  {
   if(val1 > val2)   {
      return 1;
   }else if(val1 < val2)   {
      return -1;
   }
   return 0;
}

我不知道上面的代码是否能帮助任何人找到解决方案,但我想无论如何我都会分享它。我当然愿意接受任何实现这一目标的 javascript/jQuery 方法。

谢谢。

最佳答案

这段代码可以大大改进,但这确实是一个糟糕设计的创可贴。

var myObj = {
  0: [0,50],
  1: [25,50],
  2: [148,60]
}

function makeArray( obj ) {
    var newArray = [];
    for( var x in obj ) {
        newArray.push(obj[x]);
    }
    return newArray;
}

function makeObject( newArray ) {
    var newObj = {};
    for(var i=0, n=newArray.length; i<n; i++) {
        newObj[i] = newArray[i];
    } 
    return newObj;
}

function custSortFnc(a,b) {
    return (a[0]==b[0]) ? a[1]>b[1] : (a[0] > b[0]) ? 1 : -1;
}

function addValue(val) {
    var newArray = makeArray( myObj );
    newArray.push( val );
    newArray.sort( custSortFnc );
    myObj = makeObject( newArray );
}

console.log(myObj);
addValue([122,65]);

for(var xx in myObj){
    console.log(xx + ":" + myObj[xx]);
}

如果你向这个东西添加大量元素,循环会很糟糕。我也没有真正检查排序功能,它可能是错误的。

关于javascript - 根据行的值将行拼接到索引处的 Javascript 对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9270000/

相关文章:

javascript - 在 jQuery 事件处理程序中检查输入[type=checkbox]

Javascript 帮助(初学者)

python - 如何访问通过 Cython 传递的 numpy 数组

javascript - Chart.js 中分组条形图每组不同级别

javascript - 使用 javascript 比较两个数组并查找每个值的计数

javascript - Bootstrap 单选按钮不适用于数据切换

javascript - 在后台加载 iframe 网站

php bool 运算导致500错误

java - 使用数组复制的数组存储异常

java - 枚举类型设置为 int 数组