2017-05-31 82 views
0

如何从此数组中找到user_value closet值? 听到user_value变量根据这我需要找出最接近的数组值。使用javascript从数组对象元素中查找最近值

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 } ]; 
+0

你如何定义最接近? –

+0

我们最接近的是什么?你在哪里定义它? –

+0

硬币提交最近的 –

回答

1

你可以通过使用迭代的方法检查绝对差异。

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);

+0

是啊它的工作原理 –

2

假设你定义最接近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));

0
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)) 
相关问题