我正在为一个网络应用程序使用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/