0

我试图找出比较两个数组的最佳方法。

本质上,我想知道最大和最小的数组以进行进一步处理。到目前为止,这是我这样做的代码:

merge: function(arrOne, arrTwo) {

   if(arrOne == null || arrTwo == null) throw new Error();

    var bigArr = arrOne.length > arrTwo.length ? arrOne : arrTwo,
        smallArr = bigArr.length == arrOne.length ? arrTwo : arrOne;

    console.log(bigArr);
    console.log(smallArr);

}

虽然这可行,但我猜必须有一种更简单、更有效的方法来做到这一点。有什么想法吗?

4

2 回答 2

1

最好的方法是不使用三元组,而是写一个正常的条件。

var bigArr, smallArr;
if(arrOne.length > arrTwo.length){
    bigArr = arrOne;
    smallArr = arrTwo;
}else{
    smallArr = arrOne;
    bigArr = arrTwo;
}

可读,快速,显然没有错误。

如果您真的想使用三元运算符(例如避免重复声明声明后赋值),也许正确的解决方案是重复(或缓存)条件:

var   bigArr = arrOne.length > arrTwo.length ? arrOne.length : arrTwo.length,
    smallArr = arrOne.length > arrTwo.length ? arrTwo.length : arrOne.length;

有点可读,显然没有错误,在声明时分配。

如果你想避免if 条件重复,它仍然是可能的。但是,代码不可读(主要是因为使用了逗号运算符),因此不应在生产代码中使用。不过,它可能对代码高尔夫仍然有用,我将适当地命名变量。小心轻放:

l=(a.length>b.length)?(s=b,a):(s=a,b)
于 2013-03-29T19:03:05.323 回答
0

如果数组之间存在未定义的值,您的代码将失败。如果您需要处理这种情况,您可能想尝试一种完全不同的方法。

var myArray = new Array();
myArray[100] = true;
console.log(myArray.length); // returns 101
于 2013-03-29T18:49:27.800 回答