JavaScript 循环 : for-loop works but not map?

标签 javascript loops for-loop dictionary ecmascript-6

我正在为一个网络应用程序使用mockData,并且我正在尝试循环嵌套对象。我的问题是 for 循环有效,但 array.map 无效,不知道为什么。

这是 for 循环:

  for (let i = 0; i < fakeChartData.length; i++) {
    for (let j = 0; j < fakeChartData[i].poll.length; j++) {
      if (fakeChartData[i].poll[j].id === id) {
        return fakeChartData[i].poll[j]
      }
    }
  }

这是 map 循环:

  fakeChartData.map(data => {
    data.poll.map(data => {
      if (data.id === id) {
        return data;
      }
    });
  });

我的数据结构:

fakeChartData = [
  {
    id: '232fsd23rw3sdf23r',
    title: 'blabla',
    poll: [{}, {}]
  },
  {
    id: '23dgsdfg3433sdf23r',
    title: 'againBla',
    poll: [{}, {}]
  }
];

我正在尝试加载特定对象,并在 onClick 方法上传递给它的 id。 这是完整的功能:

export const fetchPollOptById = (id) =>
  delay(500).then(() => {
    for (let i = 0; i < fakeChartData.length; i++) {
      for (let j = 0; j < fakeChartData[i].poll.length; j++) {
        if (fakeChartData[i].poll[j].id === id) {
          return fakeChartData[i].poll[j]
        }
      }
    }
});

最佳答案

for 循环内的 return 语句会导致函数返回。但是,.map() 函数回调中的 return 语句仅返回回调,然后将此返回值放入新数组中。请参阅documentation .如果你真的想使用.map(),你可以这样做:

export const fetchPollOptById = (id) => {
    var result;
    fakeChartData.map(data => {
        data.poll.map(data => {
            if (data.id === id) {
                result = data;
                return data;
            }
        });
    });
    return result;
}

注意:我还假设您的 poll 对象有一个像这样的 id 字段:

  fakeChartData = [
      {
          id: '232fsd23rw3sdf23r',
          title: 'blabla',
          poll: [
              {id: 'pollId1', otherField: 'blah'},
              {id: 'pollId2', otherField: 'blah'}
          ]
      },
      {
          id: '23dgsdfg3433sdf23r',
          title: 'againBla',
          poll: [
              {id: 'pollId3', otherField: 'blah'},
              {id: 'pollId4', otherField: 'blah'}
          ]
      }
  ];

然后您可以像这样获取民意调查数据:

fetchPollOptById("pollId3"); //returns {id: "pollId3", otherField: "blah"}

关于JavaScript 循环 : for-loop works but not map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38120276/

相关文章:

c# - UserControl 数组,每个控件都有一个方法来设置那里的标签文本,但得到一个 NullReferenceException。帮助!

php - 数组 PHP 的排列

javascript - Sinon.js spy.called 不适用于 RPC

javascript - jQuery 瘦身包 fadeIn

javascript - JQuery:检查是否使用单选按钮类名称检查了任何单选按钮

c# - 如何实现固定步长循环?

python - 如何将字符串转换为电话号码

javascript - JQuery - 多个显示/隐藏带有外部链接的 div

java - 用字符打印金字塔图案

javascript - 尝试使用循环的结果并将其记录到控制台