javascript - 检查是数组包含另一个返回不正确结果的一些元素

标签 javascript arrays

以下代码在特定条件下检查 array1 或 array2 是否包含连字符。如果他们这样做,这些连字符将被删除。然后我比较两个数组以检查一个数组中的某些元素是否包含在另一个数组中:

var array1 = ['banana-orange'];
var array2 = ['banana', 'orange'];

if (checkHyphen(array2) == true && checkHyphen(array1) == false) {
    for (let i = 0; i < array2.length; i++) {
        if (array2[i].includes('-')) {
            array2[i] = array2[i].replace('-', ' ').split(' ');
        }
    }
} else if (checkHyphen(array2) == false && checkHyphen(array1) == true) {
    for (let i = 0; i < array1.length; i++) {
        if (array1[i].includes('-')) {
            array1[i] = array1[i].replace('-', ' ').split(' ');
        }
    }
}

function checkHyphen(a) {
    var finished = false;

    for (let i = 0; i < a.length; i++) {
        if (a[i].includes('-')) {
            finished = true;
        }
    }

    return finished;
}

console.log('array2 = ' + array2); //should match array1 - it does
console.log('array1 = ' + array1); //should match array2 - it does
console.log(array2.some(v => array1.includes(v)) == true); // returns false, should be true

如果两个数组都匹配,那么显然 some() 应该返回 true,但事实并非如此。我该如何解决这个问题?

注意:array1 和 array2 不必总是完全匹配,一个或另一个可能有更多的值。我只需要测试另一个元素中是否至少存在一个元素。

JSfiddle

最佳答案

问题是您将数组的元素设置为另一个数组。所以它创建嵌套数组。在检查之前,您应该 flat() 它们。

var array1 = ['banana-orange'];
var array2 = ['banana', 'orange'];

if (checkHyphen(array2) == true && checkHyphen(array1) == false) {
            for (let i = 0; i < array2.length; i++) {
                if (array2[i].includes('-')) {
                    array2[i] = array2[i].replace('-',' ').split(' ');
                }               
            }                       
        } else if (checkHyphen(array2) == false && checkHyphen(array1) == true) { 
            for (let i = 0; i < array1.length; i++) {
                if (array1[i].includes('-')) {
                    array1[i] = array1[i].replace('-',' ').split(' ');
                }
            }
        }       

function checkHyphen(a) {   
        var finished = false;

        for (let i = 0; i < a.length; i++) {
            if (a[i].includes('-')) {
                finished = true;
            }               
        }

        return finished;
    }


array2 = array2.flat();
array1 = array1.flat();
console.log(array2.some(v => array1.includes(v)) == true);

您可以使用 JSON.stringify() 作为 flat() 的替代方法

array2 = String(array2).split(',');
array1 = String(array1).split(',');

这是您的代码的简短版本。

var array1 = ['banana-orange'];
var array2 = ['banana', 'orange'];

if (checkHyphen(array1) && !checkHyphen(array2)) {
     array1 = array1.flatMap(x => x.split('-'))                
} else if (checkHyphen(array2) && !checkHyphen(array1)) { 
     array2 = array2.flatMap(x => x.split('-'))  
}       

function checkHyphen(a) {   
        return String(a).includes('-');
    }

console.log(array2.some(v => array1.includes(v)));

关于javascript - 检查是数组包含另一个返回不正确结果的一些元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55444161/

相关文章:

javascript - 保存不保存任何数据

python - 如何更改 numpy 中 order = 'F' 的数组条目

java - 从文本文件中获取值,然后将它们放入没有重复项的列表中?

javascript - 无法读取房地产谷歌图表

javascript - 如何使用 Javascript 检测触摸悬停?

javascript - 我在 Windows 8 中从 Visual Studio 2012 执行程序后,Node.js 控制台立即关闭

Javascript:将字符串拆分为二维数组

javascript - 将 .html 与 JQuery 一起使用不会将数组中的所有项目发布到 HTML

mysql - 无法通过数组循环将值传递给数据库

javascript - 如何在javascript中添加数组中的前三个元素并删除之前的结果