获取值最接近数字X的JSON数据

Get JSON data where value is nearest to number X

本文关键字:JSON 数据 数字 最接近 获取      更新时间:2023-09-26

我有一个用户输入的数字,x,以及JSON格式的数据列表。

**114**  80  145     175     240     320
**123**  85  155     190     260     345
**132**  90  170     205     280     370

我想将X与第一列中最接近的数字匹配,然后返回该行中的以下值。

不确定我是否以最好的方式格式化了JSON。但这是我到目前为止的内容:http://jsfiddle.net/wuSux/

试试这样:

var data = [{"Body Weight":114," Untrained": 80," Novice": 145," Intermediate": 175," Advanced": 240," Elite": 320},
            {"Body Weight":123," Untrained": 85," Novice": 155," Intermediate": 190," Advanced": 260," Elite": 345},
            {"Body Weight":132," Untrained": 90," Novice": 170," Intermediate": 205," Advanced": 280," Elite": 370}];
var x = 140,
    difference = 0,
    bestIndex = 0,
    bestDifference = Infinity,
    i, cur, bodyWeight;
for (i = 0; i < data.length; i++) {
    cur = data[i];
    bodyWeight = cur["Body Weight"];
    difference = Math.abs(x - bodyWeight);
    if (difference < bestDifference) {
        bestDifference = difference;
        bestIndex = i;
    }
}
console.log(data[bestIndex]);
演示:

http://jsfiddle.net/wuSux/2/

更改x的值,以找到最接近该数字的值

更改您的数据,使最后的Body Weight320而不是"320+",然后:

function getClosest(x) {
    for (var i = data.length - 1; i > -1; i--) {
        if (x > data[i]["Body Weight"]) break
    }
    if (i === data.length - 1) return data[i];
    if (i === -1) return data[0];
    return data[i + +(x > ((data[i]["Body Weight"] + data[i + 1]["Body Weight"]) / 2))];
}

演示: http://jsfiddle.net/s8Xge/


或者:

function getClosest(x) {
    for (var i = data.length - 1; i > -1; i--) {
        if (x > data[i]["Body Weight"]) break
    }
    return i === data.length - 1                                     ? data[i] :
           i === -1                                                  ? data[0] :
           (data[i]["Body Weight"] + data[i + 1]["Body Weight"]) / 2 ? data[i + 1] :
                                                                       data[i];
}