javascript - 从 forEach 中返回

标签 javascript

我天真地编写了以下函数,认为它可以帮助我找到数据结构深处的对象。但这是行不通的,因为返回的范围在 foreach 内。该函数将始终返回未定义。我应该怎么做?

const findStuff = (data, x) => {
    data.forEach(u => {
        u.userData.forEach(ud => {
            const s = ud.stuff.find(s=>s.id === x.id);
            if (s){
                return s;
            }
        });
    });
};

最佳答案

我认为你的做法是错误的。那是......太多的代码。我创建了一个似乎符合您正在查看的数据的对象:

var data = [
  {
    username: "Alice",
    userData : [
      {
        id: 1,
        someData: "hello"
      },
      {
        id: 2,
        someData: "world"
      }
    ]
  },
  {
    username: "Bob",
    userData : [
      {
        id: 3,
        someData: "apple"
      },
      {
        id: 4,
        someData: "orange"
      }
    ]
  }
];

const findStuff = (data, lookup) => {
  return data.find(
    item => item.userData.some(
      userDataItem => userDataItem.id === lookup.id
    )
  );
}

const shouldGetAlice     = findStuff(data, {id: 1});
const shouldBeAliceAgain = findStuff(data, {id: 2});
const shouldGetBob       = findStuff(data, {id: 3});
const shouldBeAnotherBob = findStuff(data, {id: 4});

console.log(shouldGetAlice.username);
console.log(shouldBeAliceAgain.username);
console.log(shouldGetBob.username);
console.log(shouldBeAnotherBob.username);

.find()开始因为您想要获得单个项目。

在回调中,您使用 .some()检查 userData 属性,而不是自己循环遍历它们。

就是这样。您不需要手动循环每个数组。

如果删除描述性变量名称,函数可以缩短为

const findStuff = (data, x) => {
   return data.find(u => u.userData.some(ud => ud.id === x.id));
}

也可以写成一行,但似乎不太清楚。

关于javascript - 从 forEach 中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40271761/

相关文章:

javascript - onclick 和 href 无法在移动设备上协同工作

javascript - 如何在选项卡更改时停止 jquery js 功能?

javascript - jQuery 触发 DatePicker 更改事件

Javascript jquery淡入/淡出循环,如何使用计时器?

javascript - 获取隐藏字段值Jquery?

javascript - 如何获取从文件导入javascript的路径

javascript - 在循环内附加 jquery 内联日期选择器

javascript - 官方 AngularJS UI Bootstrap $modal 示例中的内存泄漏?

javascript - 在不使用 () 包装的情况下调用 native Javascript 类型的方法

javascript - 如何让 onclick 事件选择使用 Javascript 单击的元素的 id?