我遇到了数组.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;
}
结果非常奇怪。正如您所看到的,我正在在包含字符串“sku”的类型为String的数组FeedProduct中搜索字符串“sku”类型的字符串,但feedProduct.includes(wf)
返回false。
请问还有什么其他需要检查或执行的操作,以便我的代码能正常工作?如果您需要任何其他信息,请告诉我,我会提供。谢谢
**更新
该函数在其他函数中被调用,如下所示
let hasRequiredFields = hasAllRequiredFields(preparedMappingFields.storeFeedMustHaveFields, header);
console.log(feedProduct[0], requiredFields[0], feedProduct[0] === requiredFields[0]);
的结果如下:
sku sku false
** 更新二
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 ]
console.log(feedProduct[0], requiredFields[0], feedProduct[0] === requiredFields[0]);
的输出结果? - Nick Parsonsconsole.log(requiredFields[0].split('').map(c => c.charCodeAt(0)))
和console.log(feedProduct[0].split('').map(c => c.charCodeAt(0)))
的输出吗? - Nick ParsonsfeedProduct
数组包含一个由零宽不换行空格字符(65279)组成的sku
,后面跟着一个's'
,因此这两个字符串被视为不同。 - Nick Parsons