我一直试图找到两个不同数组的字符串之间的最大长度差异。我在循环中放置一个循环来迭代并找到所有字符串长度的差异。
function mxdiflg(a1, a2) {
if (a1 === [] || a2 === [])
return -1;
var result = 0;
for (var i in a1) {
for (var j in a2) {
var diff = Math.abs(i.length - j.length);
if (diff > result)
result = diff;
}
}
return result;
}
但是,此代码忽略了检查空数组的第一个if语句。它也返回0表示循环不起作用。
答案 0 :(得分:1)
首先,您无法以这种方式比较数组。就像Renan所说的那样,数组是引用类型。更改您的检查以查看阵列中是否有任何内容。
if (!a1.length || !a2.length)
return -1;
现在关于另一个问题。循环遍历for
循环中的数组会将var设置为您所在的索引。
使用forEach
:
function mxdiflg(a1, a2) {
...
var result = 0;
a1.forEach(function(i){
a2.forEach(function(j){
var diff = Math.abs(i.length - j.length);
if (diff > result)
result = diff;
});
});
return result;
}
// mxdiflg(['1','1'], ['111','1'])
或者,根据索引更改函数以从数组中获取项目:
function mxdiflg(a1, a2) {
...
var result = 0;
for (var idx in a1) {
for (var jdx in a2) {
var diff = Math.abs(a1[idx].length - a2[jdx].length);
if (diff > result)
result = diff;
}
}
return result;
}
// mxdiflg(['1','1'], ['11','1'])
顺便说一句,如果你使用ES6,你可以这样做。我发现它更具可读性。
function mxdiflg(a1, a2) {
if (!a1.length || !a2.length){
return -1;
}
var a1Lengths = a1.map((str) => str.length);
var a2Lengths = a2.map((str) => str.length);
var a1MaxLength = Math.max(...a1Lengths);
var a2MaxLength = Math.max(...a2Lengths);
return a2MaxLength - a1MaxLength;
}
// mxdiflg(['1','1'], ['111','1']) = 2
答案 1 :(得分:0)
替换
if (a1 === [] || a2 === [])
与
if (!a1.length || !a2.length)
(因为否则你将yor数组与新的空数组进行比较,这些数组总是false
)
和
for (var i in a1) {
for (var j in a2) {
...
}
}
与
for (var i of a1) {
for (var j of a2) {
...
}
}
(因为for ... in
为您提供键/索引,而不是值,即[0,1,2,3,...]。
答案 2 :(得分:0)
因为数组a1
永远不会等于[]
,所以即使[] == []
也是假的,因为正在比较引用,而不是数字或字符串的值。查看Operators。检查一个数组的长度,以判断它们是否为空。
答案 3 :(得分:0)
var a1 = ['aaa','aa','a'],
a2 = ['b','bbbbbbbb','b'];
function mxdiflg(a1, a2) {
if (!a1.length || !a2.length)
return -1;
var result = 0;
for (var i=0; i<a1.length;i+=1) {
for (var j=0;j<a2.length;j+=1) {
var diff = Math.abs(a1[i].length - a2[j].length);
if (diff > result)
result = diff;
}
}
return result;
}
mxdiflg(a1,a2);
不是最好的JS,而是你所写内容的工作副本
答案 4 :(得分:0)
按字符串长度对数组进行排序,然后针对彼此测试极值(开始和结束)。
//Initial data
var arr1 = ["Hello", "lol", "Testing"];
var arr2 = ["Houston", "Texas", "Bi-Polar Bear"];
//"Bi-Polar Bear" is longest and "lol" is shortest.
function findLongestStringDiff(arr1, arr2) {
function findLongest(a, b) {
return b.length - a.length;
}
arr1 = arr1.sort(findLongest);
arr2 = arr2.sort(findLongest);
return Math.max(
arr1[0].length - arr2[arr2.length - 1].length,
arr2[0].length - arr1[arr1.length - 1].length
);
}
var diff = findLongestStringDiff(arr1, arr2);
console.log(diff);
&#13;
答案 5 :(得分:0)
您的代码有很多问题,
1)你无法比较那样的数组,而是使用“typeof”来检查数组索引是否存在。
2)你正在使用的for-in循环是比较将相互抵消的数组索引的长度,你将得到0作为值,你应该使用normal for循环来进行这个过程 这个例子可能有帮助
numPixels: .word 655536