我遇到了 array.includes 功能的奇怪行为。 我的工作是检查变量 feedProduct 是否包含所有必填字段。
function hasAllRequiredFields(requiredFields, feedProduct) {
// Prepare array for adding missing fields
let missing_required = [];
// Print all fields and there type (only for easier debugging)
console.log(feedProduct);
console.log(typeof feedProduct);
feedProduct.forEach(fp => {
console.log(fp)
console.log(typeof fp)
})
// Check if feedProduct array contains all required fields
console.log('')
console.log('CHECK IF ALL REQUIRED FIELDS ARE PRESENT')
requiredFields.forEach(wf => {
console.log(wf);
console.log(typeof wf);
if (!feedProduct.includes(wf)) {
missing_required.push(wf);
}
})
console.log('')
console.log('')
console.log('Missing')
console.log(missing_required)
return missing_required;
}
结果很奇怪。如您所见,我在数组 FeedProduct 中搜索字符串“sku”类型的字符串,其中包括字符串类型的字符串“sku”,但 feedProduct.includes(wf)
返回 false
我也用 indexOf 尝试过相同的逻辑,结果是一样的。如果我在 Developer tools 中复制/粘贴此代码,则结果将为 true,并且不会丢失任何字段
请告诉我我还应该检查或做什么,这样我的代码才能正常工作。如果您需要任何其他信息,请告诉我,我会提供。谢谢
**更新
函数在其他函数中被调用,像这样
let hasRequiredFields = hasAllRequiredFields(preparedMappingFields.storeFeedMustHaveFields, header);
console.log(feedProduct[0], requiredFields[0], feedProduct[0] === requiredFields[0]);
的结果如下
sku sku 错误
** 更新二
console.log(requiredFields[0].split('').map(c => c.charCodeAt(0)))
console.log(feedProduct[0].split('').map(c => c.charCodeAt(0)))
Log 1:
[ 115, 107, 117 ]
Log 2:
[ 65279, 115, 107, 117 ]
最佳答案
您只是在寻找两个数组之间的差异,所以您也可以这样做...
const rf = ['foo', 'bar', 'baz'];
const fp = ['foo', 'baz']
const difference = rf.filter( x => !fp.includes(x))
console.log(difference)
如果你想要得到交叉点,你会想要这样做......
const rf = ['foo', 'bar', 'baz'];
const fp = ['foo', 'baz']
const intersection = rf.filter( x => fp.includes(x))
console.log(intersection)
关于javascript - array.includes 的奇怪行为对于字符串 'sku' 总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68480676/