0

我有一个对象

分数: {
                    900:1.0,
                    822:1.1,
                    804:1.2,
                    786:1.3,
                    768:1.4,
                    750:1.5,
                    732:1.6
                    714:1.7,
                    696:1.8
                    678:1.9
                    660:2.0,
                    588:2.4,
                    570:2.5,
                    552:2.6,
                    534:2.7
                    516:2.8,
                    498:2.9,
                    480:3.0,
                    462:3.1,
                    444:3.2
                    426:3.3,
                    408:3.4,
                    390:3.5,
                    372:3.6,
                    354:3.7
                    336:3.8,
                    318:3.9,
                    300:4.0
                }

这个对象是一个标记列表。如果您获得 900 分,您将获得 1.0 分。你得到标记 1 直到你得到 823 分。在 822 点上 => 标记 1.1

现在我有690分。我想知道给定点的下一个对象属性。在此示例中:下限:678:1.9 和上限:696:1.8。

除了我在属性上得到一个完整的命中,即 570 点我想要返回三个属性:下层、上层和完整的命中。

我怎样才能得到这两个属性?

谢谢

编辑:

我对这个问题的解决方案是:

    var a = new Array(),
        r = 新数组(),
        点= 300;

    for(this.options.marks 中的 var 键){
        a.push({'points':key, 'mark': this.options.marks[key]});
    }
    a.reverse();

    for (var i=0; ia[i].points) {

            r.push({'points':a[(i-1)].points, 'mark':a[(i-1)].mark});
            r.push({'points':points, 'mark': a[(i-1)].mark});
            r.push({'points':a[i].points, 'mark':a[i].mark});

            休息;
        }否则如果(点== a[i].points){

            if(typeof a[i-1] != '未定义'){
                r.push({'points':a[i-1].points, 'mark': a[i-1].mark});
            }别的{
                r.push({'points':a[i].points, 'mark':a[i].mark});
            }

            r.push({'points':a[i].points, 'mark':a[i].mark});

            if(typeof a[i+1] != '未定义'){
                r.push({'points':a[i+1].points, 'mark':a[i+1].mark});
            }别的{
                r.push({'points':a[i].points, 'mark':a[i].mark});
            }

            休息;
        }
    }

由于 MrP 和Get next key-value pair in an object还表示,根据 ECMAScript 的规范,对象是无序的,我决定创建一个数组并迭代抛出它们。

如果有人对此有更好的解决方案会很好

4

1 回答 1

0
function getClosestScores(points) {
  var marks = { 100: 4.4, 200: 5.5, 300: 8.8 };
  // ^ Replace this with your source data ^

  var marksArray = [];
  for (var p in marks)
    if (marks.hasOwnProperty(p))
      marksArray.push({points: p, score: marks[p]});
  marksArray.sort(function(a, b) { return a.points - b.points; });

  result = { lower: null, full: null, upper: null };
  for (var i=0; i < marksArray.length; i++) {
    var it = marksArray[i];
    if (it.points < points)
      result.lower = it;
    if (it.points == points)
      result.full = it;
    if (it.points > points) {
      result.upper = it;
      break;
    }
  }

  return result;
}

示例使用:

> console.log(JSON.stringify(getClosestScores(100)));
{"lower":null,"full":{"points":"100","score":4.4},"upper":{"points":"200","score":5.5}}
> console.log(JSON.stringify(getClosestScores(150)));
{"lower":{"points":"100","score":4.4},"full":null,"upper":{"points":"200","score":5.5}}
> console.log(JSON.stringify(getClosestScores(500)));
{"lower":{"points":"300","score":8.8},"full":null,"upper":null}
于 2013-09-17T10:30:10.030 回答