Javascript 检查数组是否包含其他数组的某些元素将返回不正确的结果
下面的代码检查在某些情况下array1或array2是否包含连字符。如果有,这些连字符将被删除。然后比较两个数组,检查一个数组中的某些元素是否包含在另一个数组中:Javascript 检查数组是否包含其他数组的某些元素将返回不正确的结果,javascript,arrays,Javascript,Arrays,下面的代码检查在某些情况下array1或array2是否包含连字符。如果有,这些连字符将被删除。然后比较两个数组,检查一个数组中的某些元素是否包含在另一个数组中: var array1 = ['banana-orange']; var array2 = ['banana', 'orange']; if (checkHyphen(array2) == true && checkHyphen(array1) == false) { for (let i = 0; i <
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
var array1=['banana-orange'];
var array2=[‘香蕉’、‘橙色’];
if(checkHyphen(array2)==true&&checkHyphen(array1)==false){
for(设i=0;iarray1.includes(v))==true);//返回false,应为true
如果两个数组都匹配,那么显然some()应该返回true,但它不是。我怎样才能解决这个问题
注意:array1和array2并不总是完全匹配,其中一个可能有更多的值。我只需要测试另一个元素中是否至少存在一个元素
问题是您正在将数组的元素设置为另一个数组。所以它创建嵌套数组。在检查之前,您应该
flat()
var array1=['banana-orange'];
var array2=[‘香蕉’、‘橙色’];
if(checkHyphen(array2)==true&&checkHyphen(array1)==false){
for(设i=0;i log(array2.some(v=>array1.includes(v))==true)代码>不要尝试检查连字符等,您应该只定义一个函数来处理各个输入数组,拆分任何连字符上的每个值,并将结果推送到新数组上
constinput1=['banana-orange','mango']
常量输入2=['香蕉'、'橘子'、'苹果葡萄']
常量输入3=['mango']
功能检查(输入1、输入2){
const process=input=>input.reduce((结果,值)=>(result.push(…value.split(+/-+/g)),result),[])
const processed=[input1,input2].map(输入=>process(输入))
返回已处理的[0]。部分(值=>已处理的[1]。包括(值))
}
控制台日志(检查(输入1,输入2))
控制台日志(检查(输入1,输入3))
log(check(input2,input3))
btw,不需要将一个布尔值与另一个布尔值进行比较,只需取一个true
值或一个false
值和一个逻辑not
array2[i]=array2[i].替换('-','').split('')代码>创建嵌套阵列我得到的是阵列2.flat不是function@Sweepster是的,因为并非每个浏览器都提供flat()
,这就是为什么in提到第二种方法JSON.stringify(array2).split(‘,’)
不过我在使用chrome.JSON,我得到的是array2=[[“香蕉”,“橙色”]]而不是array2=[“香蕉”,“橙色”]@Sweepster抱歉,我犯了错误,用String
代替了JSON.stringify
我更新了