在其他数组中有效地找到长度较小的数组

时间:2015-06-28 14:29:33

标签: javascript arrays

如何在javascript中有效地找到哪个是最小的数组

var ar1 = [1, 5, 10, 20, 40, 80];
var ar2 = [6, 7, 20, 80, 100];
var ar3 = [3, 4, 15, 20, 30, 70, 80, 120];

我对使用多个if条件不感兴趣。建议我在javascript中找到最小尺寸数组的有效方法。

if(ar1.length < ar2.length){
  if(ar1.length < ar3.length){
    console.log("ar1");
   }else{
    console.log("ar3");
   }
}else{
   if(ar2.length < ar3.length){
     console.log("ar2");
   }else{
    console.log("ar3");
  }
}

由于

7 个答案:

答案 0 :(得分:1)

您可以创建一个将每个数组与其名称相关联的对象(也可以考虑使用数组)。

然后迭代它,并比较长度。

var obj = {ar1: ar1, ar2: ar2, ar3: ar3 /*...*/},
    minLen = Infinity,
    minName;
for(var name in obj)              /* Iterate the arrays */
  if(obj[name].length < minLen) { /* Smaller array found */
    minLen = obj[name].length;    /* Update the minimum length */
    minName = name;               /* Store its name */
  }
console.log(minName);

答案 1 :(得分:1)

创建一个接受所有数组的方法,循环并比较长度。

var ar1 = [1, 5, 10, 20, 40, 80];
var ar2 = [6, 7, 20, 80, 100];
var ar3 = [3, 4, 15, 20, 30, 70, 80, 120];

function returnSmallest() {

  var smallest = arguments[0];
  for(var i=1;i<arguments.length;i++){
      if(smallest.length>arguments[i].length) {
          smallest = arguments[i];  
      }
  }
  return smallest;
}

console.log(returnSmallest(ar1,ar2,ar3));

答案 2 :(得分:0)

使用递归三元运算符,您可以轻松获得最小长度,然后将其分配给数组:

var mlen = Math.min(ar1.length,ar2.length,ar3.length);
var str = (ar1.length===mlen ? "ar1":(ar2.length===mlen ? "ar2":"ar3"));

如果你真的想记录它:

console.log(str);

完整代码

&#13;
&#13;
var ar1 = [1, 5, 10, 20, 40, 80];
var ar2 = [6, 7, 20, 80, 100];
var ar3 = [3, 4, 15, 20, 30, 70, 80, 120];

var mlen = Math.min(ar1.length,ar2.length,ar3.length);
var str = (ar1.length===mlen ? "ar1":(ar2.length===mlen ? "ar2":"ar3"));

document.getElementById("plh").innerHTML = str;
&#13;
<div id="plh"></div>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

尝试:

var ar1 = [1, 5, 10, 20, 40, 80];
var ar2 = [6, 7, 20, 80, 100];
var ar3 = [3, 4, 15, 20, 30, 70, 80, 120];

function compareSmall(array1, array2) {
    if (array1.length < array2.length) 
        return array1;
    else
        return array2;
}

console.log(compareSmall(compareSmall(ar1,ar2),ar3));

答案 4 :(得分:0)

var ar1 = [1, 5, 10, 20, 40, 80];
var ar2 = [6, 7, 20, 80, 100];
var ar3 = [3, 4, 15, 20, 30, 70, 80, 120];
var smallest = ar1;
if (smallest.length > ar2.length) smallest = ar2;
if (smallest.length > ar3.length) smallest = ar3;

答案 5 :(得分:0)

您可以将数组长度放入另一个数组

var arrayLengths = [arr1.length, arr2.length, arr3.length];

然后使用Math库的内置函数来查找哪个数组是最大/最小的

var arrI = arrayLengths.indexOf(Math.max.apply(Math, arrayLengths));

请注意,如果两个数组的长度最小,则会为您提供第一个数组的索引。

答案 6 :(得分:0)

你也可以用更实用的方式做到这一点:

var ar1 = [1, 5, 10, 20, 40, 80];
var ar2 = [6, 7, 20, 80, 100];
var ar3 = [3, 4, 15, 20, 30, 70, 80, 120];

var smallest = [ar1, ar2, ar3].reduce(function (previous, current) {
    if (previous.length === 0) {
        return current;
    }
    return current.length < previous.length ? current : previous;
}, []);

console.log(smallest);