每个和每个嵌套JavaScript一些

时间:2016-08-09 14:52:23

标签: 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
  })
}));

我认为我的问题在于如何在some内嵌套every。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分: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
  });
}));

执行之间存在差异:

goodUser => testUser.id === goodUser.id

goodUser => { testUser.id === goodUser.id; }

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

goodUser => { return testUser.id === goodUser.id; }

您正在使用{},它会启动一个语句块,并省略return语句。

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