如何在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");
}
}
由于
答案 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);
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;
答案 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);