3

Javascript のこれらの 3 つの配列では、配列の値は ProductId => Price (xx:xx) です。

var instantPriser = {11: 48,12: 96,13: 144,14: 192,15: 240,16: 288,17: 336,18: 384,19: 432,20: 480,21: 528,22: 576,23: 624,24: 672,25: 720,26: 768,9999999999999999};
var maletPriser   = {27: 20,28: 40,29: 60,30: 80,31: 100,32: 120,33: 140,34: 160,35: 180,36: 200,37: 220,38: 240,39: 260,40: 280,41: 300,42: 320,43: 340,44: 360,45: 380,46: 400,47: 420,48: 440,49: 460,50: 480,51: 500,52: 520,53: 540,54: 560,55: 580,56: 600,57: 620,58: 640,59: 660,60: 680,61: 700,62: 720,63: 740,64: 760,65: 780,66: 800,67: 820,68: 840,69: 860,70: 880,71: 900,9999999999999999};
var heleBoenner   = {72: 89,73: 178,74: 267,75: 356,76: 445,77: 534,78: 623,79: 712,80: 801,81: 890,82: 979,83: 1068,84: 1157,85: 1246,86: 1335,87: 1424,88: 1513,89: 1602,90: 1691,91: 1780,92: 1869,93: 1958,94: 2047,95: 2136,9999999999999999};

価格で配列から最も近い「productId」を取得する方法を確認しようとしていますか?

私はこれを試しましたが、うまくいかないようです:

 var price = 450;
 for ( i=0;i<instantPriser.length;i++ ){
        if ( pris <= instantPriser[i]){
            alert(instantPriser[i]);
            return false;
        }
 }

値が 432 と 480 (450 に最も近い) であるため、19 または 20 のように出力されるはずです。

これどうやってするの?

4

3 に答える 3

1

すべての値を配列にプッシュし、次のコードを使用して最も近い値を見つけます

  var closest  = null;

  $.each(arr, function(index,value1){
      if (closest == null || Math.abs(value1 - value) < Math.abs(closest - value)) {
        closest = this.value;
      }
    });
  alert(closest );

リンク

于 2013-05-15T06:55:37.607 に答える
0

機能的なスタイルで:

var target = 450;
Object.keys(instantPriser).reduce(function(best, x) {
    return Math.abs(instantPriser[best] - target) <= Math.abs(instantPriser[x] - target)
        ? best : x;
})

またはヘルパー関数を使用:

Array.prototype.min = function(arr, f) {
    f = f || function(x) { return x; };
    return arr.reduce(function(best, x) { return f(best) <= f(x) ? best : x; });
}

与える:

var target = 450;
Object.keys(instantPriser).min(function(x) {
    return Math.abs(instantPriser[key] - target);
})
于 2013-05-15T07:47:45.770 に答える