javascript - array.includes 的奇怪行为对于字符串 'sku' 总是返回 false

标签 javascript

我遇到了 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

sku missing

我也用 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/

相关文章:

javascript - 多个 $scope.$watch 在 Angular JS 中不起作用

javascript - 在 promise 链中创建错误

javascript - 如何捕获任何 HTML 元素上的 onKeyUp 事件?

javascript - JQuery 淡入淡出()

javascript - Window.Onload 上的特定 URL

javascript - 使用字符串数组循环对象

javascript - Angular 2 选择选项(下拉)-如何获取更改值以便在函数中使用它?

javascript - 确定点击了哪个按钮 javascript/jquery

javascript - 有没有什么正确的方法可以重用ID?

javascript - 如何防止 d3.js 强制布局在恢复/重启时脉动/弹跳