gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:01:51 24 4
gpt4 key购买 nike

以下代码在特定条件下检查 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com