如何从多维数组中获取最小值?

时间:2016-09-27 03:39:57

标签: javascript arrays multidimensional-array

我试图从多维数组中获取较低的数值。就像这样。

alert() // 25

我想返回较低值的警报,如下所示:

08:44:26.560 [consensus/noops] processTransactions -> DEBU 053 Starting TX batch with timestamp: seconds:1473929066 nanos:560229743
08:44:26.560 [consensus/noops] processTransactions -> DEBU 054 Executing batch of 1 transactions with timestamp seconds:1473929066 nanos:560229743
08:44:26.563 [chaincode] getArgsAndEnv -> DEBU 055 Executable is /opt/gopath/bin/1e90b51f9129b97d5312d5c24364085777602a06d40d6e2c9209b4f30d7e66facb26e956443028611539962acc6de550eba03bbb1fd0e7bbd655cb19c5a6ef84
08:44:26.564 [chaincode] Deploy -> DEBU 056 deploying chaincode 1e90b51f9129b97d5312d5c24364085777602a06d40d6e2c9209b4f30d7e66facb26e956443028611539962acc6de550eba03bbb1fd0e7bbd655cb19c5a6ef84(networkid:dev,peerid:vp0)
08:44:26.564 [container] lockContainer -> DEBU 057 waiting for container(dev-vp0-1e90b51f9129b97d5312d5c24364085777602a06d40d6e2c9209b4f30d7e66facb26e956443028611539962acc6de550eba03bbb1fd0e7bbd655cb19c5a6ef84) lock
08:44:26.564 [container] lockContainer -> DEBU 058 got container (dev-vp0-1e90b51f9129b97d5312d5c24364085777602a06d40d6e2c9209b4f30d7e66facb26e956443028611539962acc6de550eba03bbb1fd0e7bbd655cb19c5a6ef84) lock

**08:44:26.565 [dockercontroller] deployImage -> ERRO 059 Error building images: cannot connect to Docker endpoint**

如果有人能帮助我,我将非常感激。

4 个答案:

答案 0 :(得分:1)

var array = [
        ["guitar", "99", "guitar.png"],
        ["vinyl", "89", "vinyl.png"],
        ["bed", "25", "bed.png"]
    ];

min_second = array.reduce(function(a, x) {
  var b = parseFloat(x[1]);
  return a < b ? a : b;
}, Number.POSITIVE_INFINITY);
              
console.log(min_second);

array.reduce将回调函数应用于累加器和每个连续元素,并将结果赋给累加器;累加器从+∞开始。回调的目的是第二个值(转换为数字)小于该值的每个元素成为新的累加器。因此,

  • 累加器从+∞
  • 开始
  • 与99相比,变为99
  • 与89相比,变为89
  • 与25相比,变为25

如果将其与大于累加器当前值的值进行比较,则不会改变。

答案 1 :(得分:1)

将问题分解为两部分,您可以单独解决(或使用现有工具来解决):

  1. 将每个子数组的第二个元素提取到一个新的一级数组中。
  2. 找到数组的最小值。
  3. 首先,我们使用map通过对每个元素应用一些转换,从旧的数组创建一个新数组。在这种情况下,转换是提取第二个元素,并将其转换为数字,所以:

    Things.map(([,num]) => +num))
    

    [,num]表示将传入的数组的第二个元素赋值给参数num),加号确保它是一个数字。请参阅下面的非ES6版本。

    对于第二个,我们可以使用Math.min

    结合这些,我们可以写:

    Math.min(...Things.map(([,num]) => +num)))
    

    Math.min(...)将映射数组中的所有元素(数字)作为参数传递给Math.min

    强制免责声明=>是ES6箭头功能,[,num]是ES6参数解构(和...是ES6参数展开运算符。这些仅适用于以某种方式支持ES6的环境。否则,请回到

    Math.min.apply(0, Things.map(function(elt) { return +elt[1]; }))
    

答案 2 :(得分:0)

假设第二个元素是我们正在比较的值。我们可以简单地做一个标准算法来迭代数组并找到最低值。

var array = [
  ["guitar", "99", "guitar.png"],
  ["vinyl", "89", "vinyl.png"],
  ["bed", "25", "bed.png"]
];
// Assume the first element has the lowest value     
var lowest = +Infinity; // `+` cast to number                       
array.forEach(function(item) {
    if(+item[1] < lowest) lowest = +item[1]; // If we find a lower value update lowest
});
console.log(lowest);

答案 3 :(得分:-1)

使用sort函数尝试:

function compare(a,b) {
  if (parseInt(a[1]) < parseInt(b[1]))
    return -1;
  if (parseInt(a[1]) > parseInt(b[1]))
    return 1;
  return 0;
}

var myArray = [
        ["guitar", "99", "guitar.png"],
        ["vinyl", "89", "vinyl.png"],
        ["bed", "25", "bed.png"]
    ];

myArray.sort(compare);

alert(myArray[0][1]);