我在Javascript中有一个对象数组,我需要检查值是否在该对象中以返回id。我使用的是some()
函数,但它仅在与第一个对象匹配时有效
这是一个数组:
const testObj = [
{id: 1, nombre: "Juan"},
{id: 2, nombre: "María"},
{id: 3, nombre: "Pedro"}
];
我是这么做的:
let test = 'María'
let priority;
testObj.some(item => item.nombre === test ? priority = item.id : priority = 7)
下面是它返回的内容:
console.log(priority) // 7
如果在一个对象中找到值,为什么它不返回正确的id?
2条答案
按热度按时间rks48beu1#
回调函数一返回
true
,Array.some()
方法就结束。(如7)等效于true
,当priortiy
为7时,some结束。Array.some()
用于查找是否至少有一个项目与条件匹配,其结果为布尔值(如果至少有一个匹配,则为true;如果没有,则为false)。不要将其用作简单的循环,或用于查找特定的项目。使用
Array.find()
代替。如果找到了项,则将其反结构化为id
并赋值给priority
。如果Array.find()
找不到项,则返回null
。我们可以使用Nullish coalescing operator (??)提供一个默认值为7的回退对象。2q5ifsrm2#
问题
您在三元运算符的else条件中将priority的值设置为7,无论是否找到该值,该运算符都将始终执行。
解决方案:
您可以修改代码,以便仅当在数组中找到优先级值时才设置该值。
使用
for..of
循环:使用
find()
方法:find()
或简单的for..of
循环(带有早期中断语句)可能比使用some
更好。*