如何检查 javascript 数组是否已包含特定数组
How can I check if javascript array already contains a specific array
我学习 Javascript 并阅读并理解 includes
如何测试数组中是否存在值。
当我有一个看起来像这样的项目数组时,我的问题就来了:
state = { focused: null, files: [] };
:
图片显示如下:
当我添加一个新的newFile
并且它是相同的它应该不会添加它但是评估,
if (newFile && !files.includes(newFile)) {..
总是说 false 那么如何测试这个我是否必须测试 newFiles
中的各个值?
Array.includes 对数组或对象进行引用比较,因此您可以使用 Array.filter
if (newFile && newFile.filter(e => { /*Comparison logic */ }).length > 0)
Array.includes
不会在对象之间进行深度比较,只会比较引用的浅层比较。这样,即使具有相同值的对象也会在测试中失败,因为它们具有不同的引用。
在您的情况下,您可以比较 id
,它对于每个对象应该是唯一的。您可以使用 Array.every
检查所有值是否都通过了测试。这样您就可以检查每个文件 ID 是否与新文件 ID 不匹配:
if (newFile && files.every(({id}) => newFile.id !== id))
我学习 Javascript 并阅读并理解 includes
如何测试数组中是否存在值。
当我有一个看起来像这样的项目数组时,我的问题就来了:
state = { focused: null, files: [] };
:
图片显示如下:
当我添加一个新的newFile
并且它是相同的它应该不会添加它但是评估,
if (newFile && !files.includes(newFile)) {..
总是说 false 那么如何测试这个我是否必须测试 newFiles
中的各个值?
Array.includes 对数组或对象进行引用比较,因此您可以使用 Array.filter
if (newFile && newFile.filter(e => { /*Comparison logic */ }).length > 0)
Array.includes
不会在对象之间进行深度比较,只会比较引用的浅层比较。这样,即使具有相同值的对象也会在测试中失败,因为它们具有不同的引用。
在您的情况下,您可以比较 id
,它对于每个对象应该是唯一的。您可以使用 Array.every
检查所有值是否都通过了测试。这样您就可以检查每个文件 ID 是否与新文件 ID 不匹配:
if (newFile && files.every(({id}) => newFile.id !== id))