【问题标题】:CodeWars Javascript Challenge: Are they the "same"?CodeWars Javascript 挑战:它们“相同”吗?
【发布时间】:2020-05-28 19:42:53
【问题描述】:

卡塔:link

我的解决方案:

function comp(array1, array2) {
    let result;
    if (Array.isArray(array1) && Array.isArray(array2) && array1.length && array2.length) {
        result = true;
        const squares = array2.map(e => Math.sqrt(e));
        squares.forEach((e) => {
            if (array1.includes(e)) return;
            result = false;
        });
    } else {
        result = false
    }
    return result;
}

我不想要其他解决方案。我想弄清楚为什么我的测试没有通过所有测试。 (两次测试失败,但我看不到哪个)

如果两个数组都是[],我怀疑测试需要true。但 Kata 的描述另有说明:

如果 a 或 b 为 nil(或 null 或 None),则问题没有意义,因此返回 false。

我们将不胜感激。


基于答案的工作解决方案:

function comp(array1, array2) {
    let result;
    if (Array.isArray(array1) && Array.isArray(array2)) {
        result = true;
        const sortedArray1 = array1.sort((a, b) => a - b);
        const squares = array2.map(e => Math.sqrt(e)).sort((a, b) => a - b);
        squares.forEach((e, i) => {
            if (sortedArray1[i] === e) return;
            result = false;
        });
    } else {
        result = false
    }
    return result;
}

【问题讨论】:

  • 您从 kata 提供的描述谈到了 null 值,而您怀疑是空数组。两者不一样。你测试过你的怀疑吗?
  • 在我看来nil 或null 与[] 不同。
  • 如果我从if 语句中删除&& array1.length && array2.length,它会再通过一个测试。我认为我的怀疑是正确的,但它仍然在一项测试中失败。假设它对空数组期望为真,我会玩弄它。

标签: javascript arrays math


【解决方案1】:

好吧,一些作弊解决方法,但您的代码在这里失败: 这就是为什么在删除两个.length 后,您又通过了一项测试。

下一个是 在.sqrt array2 之后你得到2, 3, 3 这就是为什么你返回真,但它是假的。这个答案足以帮助你解决这个 kata。

顺便说一句。

如果两个数组都是 [],我怀疑测试结果为真。但是卡塔的 说明另有说明:

卡塔的描述:

a 或 b 可能是 [](除 R、Shell 之外的所有语言)。 : - D

附:我知道对于某些人来说,检查论点可能被视为作弊,我这样做只是为了教育目的。黑匣子并不总是足以找出问题所在。

【讨论】:

  • 谢谢,不知怎的,我从没想过记录这些参数。
【解决方案2】:

如果有多个相同的数字,但这里和那里的计数不同,它将在您的代码中返回 true,因为它在两个数组中都是 includes。您应该对其进行排序并按索引迭代以进行比较,以确保数组中的每个项目仅使用一次。

这对我有用:

function comp(array1, array2){
  if(!array1 || !array2) return false;
  array1 = array1.map(t => t**2).sort((a,b)=>a-b);
  array2 = array2.sort((a,b)=>a-b);

  for(let i=0;i<array1.length;i++){if(array1[i] !== array2[i])return false}
  return true;
}

确保你能理解这个想法,并在你现有的代码中做一些调整

【讨论】:

    猜你喜欢
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    相关资源
    最近更新 更多