这个find方法的错误在哪里?

Where is the mistake in this find method?

该代码适用于简单的 foreach 函数,但不适用于 find 方法。 这是 forEach 代码:

getItemById: function (id) {
    let found = null;
    data.items.forEach(item => {
     if (item.id === id) {
      found = item;
     }
    });
    return found;
}

这是带有查找方法的代码:

getItemById: function (id) {
      let item = data.items.find(item => {
        item.id === id;
      });
      return item;
    }

为什么代码不能用 find 方法工作?

这里还有对象数组:

const data = {
    items: [
      { id: 0, name: 'Steak Dinner', calories: 1200 },
      { id: 1, name: 'Sausage', calories: 1100 },
      { id: 2, name: 'Eggs', calories: 200 },
    ],
    currentItem: null,
    totalCalories: 0,
  }

您没有返回 find 回调中的布尔值

let item = data.items.find(item => {
    return item.id === id;
});

find 需要一个谓词函数作为回调和 return 满足条件的值。如果您不 return,则 undefined 将默认 return,并且 undefined 被视为 falsy 值。

您没有从 find 函数中 returning 任何东西。如果谓词函数不会 return truefind 将不会考虑匹配。在任何情况下都没有 returns true 的匹配项,因为 find 编辑的所有值 return 都是 undefined

return item.id === id. 

const data = {
  items: [
    { id: 0, name: "Steak Dinner", calories: 1200 },
    { id: 1, name: "Sausage", calories: 1100 },
    { id: 2, name: "Eggs", calories: 200 },
  ],
  currentItem: null,
  totalCalories: 0,
};

const obj = {
  getItemById: function (id) {
    let item = data.items.find((item) => {
      return item.id === id;
    });
    return item;
  },
};

console.log(obj.getItemById(0));

您刚刚在查找函数中忘记了 return 语句。因此它将 运行 遍历所有项目并且目前没有任何结果。

所以只需 return item.id === id 的结果就可以了。

let item = data.items.find(item => {
    return item.id === id;
});

getItemById: function (id) {
      return data.items.find(item => item.id === id);
    }

您不必使用“{”和“;”在 data.items.find() 方法中。因为,find 是一个谓词函数

如果 lambda 函数包含 单个表达式,它会自动 returned。 (;{} 不是表达式的一部分) 否则return语句是必须的,要return一个值。

find 接受谓词 & 因此它必须 return a boolean.

要么,

let item = data.items.find(item => item.id === id);

或者,

let item = data.items.find(item => {
    return item.id === id;
});