我在这里用每种方法做错了什么?

What am I doing wrong here with EVERY method?

谁能帮我解决我的问题?我试图在包含对象的数组上使用 ARRAY.EVERY 方法。我希望函数和循环为 return FALSE,并在每次遇到随提示输入的 NAME 变量值与各个数组对象中的 USERNAME 值之间的收敛时结束。 在给定的示例中,当变量名称的值与该对象中的用户名相同时,函数仅对数组中的第一个对象确定 false。如果 NAME 变量的值与数组中的第二个对象一致,则该函数将显示 TRUE 而它应该为 FALSE。为什么会这样?难道不是每个方法都适用于数组中的每个元素吗?似乎该函数只考虑数组中的第一个对象,我不知道为什么。请帮忙 :)! CODEPEN link 这里 - https://codepen.io/gennaro1995/pen/QWNdMdP

const names = [{username: "Mateusz"}, {username: "Kamil"}, {username: "Marcinek"}];

const name = prompt("Your name is here!");

const spr = names.every((num) => {
    let result = num.username != name;
    console.log(result);
})

您的问题是 every 中的方法没有 return 结果(真/假)。它在您的代码中应该如下所示:

const spr = names.every((num) => {
  let result = num.username != name;
  console.log(result);
  return result;
});

Every接受一个函数作为参数,这个函数接受数组元素作为参数,并且应该returntrue/false(有条件)。 Every 询问数组元素的 all 是否 return 对所需函数为真。 如果您的目标是 return 如果输入的名称在列表中则为真,那么您应该改用一些名称,如下所示:

const names = [
  { username: 'Mateusz' },
  { username: 'Kamil' },
  { username: 'Marcinek' },
];

const name = prompt("Your name is here!");
const spr = names.some((num) => num.username == name);
console.log(spr);

如果你想 return true 只有 如果名称不在名称中:

const names = [
  { username: 'Mateusz' },
  { username: 'Kamil' },
  { username: 'Marcinek' },
];

const name = prompt("Your name is not here!");
const spr = names.every((num) => num.username != name);
console.log(spr);

我假设您的目标是确保用户输入的值不存在于名称对象数组中。

正如 Shimon 已经指出的那样,every() 要求传递函数 returns true/false,并检查数组中的所有元素是否满足传递函数中使用的条件.

即使其中一个元素不满足条件,every() returns false 也不会进一步检查。

您所做的是将检查结果存储在一个变量中,然后将其记录在控制台中。您没有返回条件表达式的结果。

在传递给 every() 的函数中添加一个像 return result; 这样的语句作为最后一个语句将使您的代码正常工作。