每一个和一些嵌套JavaScript

Ste*_*rey 2 javascript ecmascript-6

我想弄清楚为什么这会返回false:

var goodUsers = [
  { id: 1 },
  { id: 2 },
  { id: 3 },
];

var testUsers = [
  { id: 1 },
  { id: 2 },
  { id: 3 }
];

console.log(testUsers.every(testUser => {
  goodUsers.some(goodUser => {
    testUser.id === goodUser.id
  })
}));
Run Code Online (Sandbox Code Playgroud)

我认为我的问题在于我是如何在some里面筑巢的every.任何帮助,将不胜感激.谢谢!

Roc*_*mat 6

你的回调.some.every实际上没有返回任何东西.这就是你得到的原因false.

var goodUsers = [
  { id: 1 },
  { id: 2 },
  { id: 3 },
];

var testUsers = [
  { id: 1 },
  { id: 2 },
  { id: 3 }
];

console.log(testUsers.every(testUser => {
  return goodUsers.some(goodUser => {
    return testUser.id === goodUser.id
  });
}));
Run Code Online (Sandbox Code Playgroud)

做:有区别:

goodUser => testUser.id === goodUser.id
Run Code Online (Sandbox Code Playgroud)

goodUser => { testUser.id === goodUser.id; }
Run Code Online (Sandbox Code Playgroud)

第一个 - 没有 {} - 有隐含的 return.它返回表达式的值.它和做的一样:

goodUser => { return testUser.id === goodUser.id; }
Run Code Online (Sandbox Code Playgroud)

你正在使用{},它启动了一个语句块,并省略了return语句.

DOCS:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

  • 或者确实,`console.log(testUesrs.every(testUser => goodUsers.some(goodUser => testUser.id === goodUser.id)));` (2认同)
  • @WilliamC:有*简洁*形式,不使用`{}`; 当你使用带有`{}`的较长形式时,没有隐式返回. (2认同)
  • @ LUH3417:这基本上就是我第一次不理解的那句话.你的意思是,我们可以称之为具有简洁体的箭头功能与具有正常身体的箭头功能不同吗?首先,我听说过"简洁的箭头功能"或"简洁的箭头功能"(规范使用*ConciseBody*作为语法元素).我没有听到具有正常功能体的箭头功能的特定术语. (2认同)