繁体   English   中英

使用JavaScript从数组对象元素中找到最近的值

[英]Closest value find from array object element using javascript

如何从此数组中找到user_value最接近的值? 这是根据此user_value变量,我需要从数组中找出最接近的值。

var user_value = 5500;
var array = [ 

    {_id: 5809e269d60f577ae35f6add,
      coins: 1000,
      is_active: 1,
      iconId: 4 },
    {_id: 5809e269d60f577ae35f6ade,
      coins: 2000,
      is_active: 1,
      iconId: 5 },
    {_id: 5809e269d60f577ae35f6adf,
      coins: 5000,
      is_active: 1,
      iconId: 6 },
    {_id: 5809e269d60f577ae35f6ae0,
      coins: 7000,
      is_active: 1,
      iconId: 7 },
    {_id: 5809e269d60f577ae35f6ae1,
      coins: 10000,
      is_active: 1,
      iconId: 8 },
    {_id: 5809e269d60f577ae35f6ae2,
      coins: 15000,
      is_active: 1,
      iconId: 9 } ];

假设您将最接近的定义为Math.abs(array[i].coins - value); ,您只需要迭代数组,如下所示:

 var user_value = 5500; var array = [ { coins: 1000, is_active: 1, iconId: 4 }, { coins: 2000, is_active: 1, iconId: 5 }, { coins: 5000, is_active: 1, iconId: 6 }, { coins: 7000, is_active: 1, iconId: 7 }, { coins: 10000, is_active: 1, iconId: 8 }, { coins: 15000, is_active: 1, iconId: 9 } ]; function findClosest (value) { // By default that will be a big number var closestValue = Infinity; // We will store the index of the element var closestIndex = -1; for (var i = 0; i < array.length; ++i) { var diff = Math.abs(array[i].coins - value); if (diff < closestValue) { closestValue = diff; closestIndex = i; } } return closestIndex; } console.log("The closest index: " + findClosest(user_value)); 

您可以通过使用绝对差异进行检查来使用迭代方法。

 var value = 5500, array = [{ _id: '5809e269d60f577ae35f6add', coins: 1000, is_active: 1, iconId: 4 }, { _id: '5809e269d60f577ae35f6ade', coins: 2000, is_active: 1, iconId: 5 }, { _id: '5809e269d60f577ae35f6adf', coins: 5000, is_active: 1, iconId: 6 }, { _id: '5809e269d60f577ae35f6ae0', coins: 7000, is_active: 1, iconId: 7 }, { _id: '5809e269d60f577ae35f6ae1', coins: 10000, is_active: 1, iconId: 8 }, { _id: '5809e269d60f577ae35f6ae2', coins: 15000, is_active: 1, iconId: 9 }], result = array.reduce(function (r, a, i, aa) { return i && Math.abs(aa[r].coins - value) < Math.abs(a.coins - value) ? r : i; }, -1); console.log(result); 

var _ = require('underscore');

var user_value = 5500;
var array = [ 

    { _id: '5809e269d60f577ae35f6add',
      coins: 1000,
      is_active: 1,
      iconId: 4 },
    { _id: '5809e269d60f577ae35f6ade',
      coins: 2000,
      is_active: 1,
      iconId: 5 },
    { _id: '5809e269d60f577ae35f6adf',
      coins: 5000,
      is_active: 1,
      iconId: 6 },
    { _id: '5809e269d60f577ae35f6ae0',
      coins: 7000,
      is_active: 1,
      iconId: 7 },
    { _id: '5809e269d60f577ae35f6ae1',
      coins: 10000,
      is_active: 1,
      iconId: 8 },
    { _id: '5809e269d60f577ae35f6ae2',
      coins: 15000,
      is_active: 1,
      iconId: 9 } ];
function getClosest(array, target) {
    var tuples = _.map(array, function(json) {
        return [json, Math.abs(json.coins - target)];
    });
    //console.log(tuples);
    return _.reduce(tuples, function(memo, val) {
        return (memo[1] < val[1]) ? memo : val;
    }, [-1, 999])[0];
}

console.log(getClosest(array, user_value))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM