首页 > 解决方案 > CodeWars Javascript 挑战:它们“相同”吗?

问题描述

卡塔:链接

我的解决方案:

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;
}

标签: javascriptarraysmath

解决方案


好吧,一些作弊的解决方法,但你的代码在这里失败: 在此处输入图像描述 这就是为什么在删除两个之后.length你又通过了一个测试。

下一个是 在此处输入图像描述.sqrtarray2 之后,你得到2, 3, 3这就是你返回 true 的原因,但它是 false。这个答案足以帮助你解决这个 kata。

顺便提一句。

如果两个数组都是 [],我怀疑测试期望为真。但 Kata 的描述另有说明:

卡塔简介:

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

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


推荐阅读