我试图找出比较两个数组的最佳方法。
基本上我想知道进一步处理的最大和最小的数组。这是我到目前为止的代码:
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);
}
虽然这有效,但我猜测必须有一种更简单,更有效的方法。有什么想法吗?
答案 0 :(得分: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)
答案 1 :(得分:0)
如果数组之间存在未定义的值,则代码将失败。如果你需要处理这样的情况,你可能想尝试一种完全不同的方法。
var myArray = new Array();
myArray[100] = true;
console.log(myArray.length); // returns 101