Javascript 使用map在对象数组上迭代,直到最后一个对象
我有一个对象数组,其中除最后一个对象外,所有对象都具有相同的键。假设数组中有值,为了表示所有这些值,作为一个整体,我有一个键,我最后按下了这个键以及数组中的值 homeTask是一个对象列表,它是值,homeTaskKey是表示homeTask的键Javascript 使用map在对象数组上迭代,直到最后一个对象,javascript,reactjs,Javascript,Reactjs,我有一个对象数组,其中除最后一个对象外,所有对象都具有相同的键。假设数组中有值,为了表示所有这些值,作为一个整体,我有一个键,我最后按下了这个键以及数组中的值 homeTask是一个对象列表,它是值,homeTaskKey是表示homeTask的键 res.data.resultSet.homeTask.forEach(element => { var singleEvent={ t
res.data.resultSet.homeTask.forEach(element => {
var singleEvent={
task:'',
taskDuration:'',
status:'',
};
singleEvent.task=element.task;
singleEvent.taskDuration=element.taskDuration;
singleEvent.status=element.status;
newEvents.push(singleEvent);
});
newEvents.push(res.data.resultSet.homeTaskKey);
addEvent(newEvents);
}
addEvent是父组件的props方法,在这里我将数组设置为将变量名声明为数组类型的事件
当我使用map迭代事件时,我想跳过最后一个对象,因为它没有像task、taskDuration和status这样的键。因此,当我获取这些值时,它不会给出任何问题
res.data.resultSet.homeTask.forEach((element,index) => {})
函数的第二个参数是索引,您可以使用它通过将第二个元素与数组的总长度进行比较来识别最后一个元素
函数的第二个参数是索引,您可以使用它通过与数组的总长度进行比较来识别最后的第二个元素。您仍然可以使用map,但只需在map完成后弹出最后一个元素即可。例如:
const newEvents = homeTask.map(({ task, taskDuration, status }) => ({
task, taskDuration, status
}))
newEvents.pop()
addEvent(newEvents)
或者用taskkey替换最后一项,因为您知道最后一项将是垃圾:
newEvents[newEvents.length - 1] = res.data.resultSet.homeTaskKey
或者只是在映射之前对数组进行切片,然后像刚才那样在末尾按taskKey。在你的道具上执行切片是安全的,因为它是浅拷贝
或者最重要的是,问问自己,为什么会有这样一个完全奇怪的数据结构,它的末尾附加了密钥。也许重新考虑您的数据,而不是一开始就为自己制造这个问题。您仍然可以使用map,但只需在map完成后弹出最后一个元素即可。例如:
const newEvents = homeTask.map(({ task, taskDuration, status }) => ({
task, taskDuration, status
}))
newEvents.pop()
addEvent(newEvents)
events.slice(0, events.length-1).map(<function>);
或者用taskkey替换最后一项,因为您知道最后一项将是垃圾:
newEvents[newEvents.length - 1] = res.data.resultSet.homeTaskKey
或者只是在映射之前对数组进行切片,然后像刚才那样在末尾按taskKey。在你的道具上执行切片是安全的,因为它是浅拷贝
或者最重要的是,问问自己,为什么会有这样一个完全奇怪的数据结构,它的末尾附加了密钥。也许重新考虑你的数据,而不是一开始就为自己制造这个问题
events.slice(0, events.length-1).map(<function>);
这将忽略最后一个元素,所有n-1条目将被馈送到map
更新:
数组名为events而不是event,因此应为events.length
这将忽略最后一个元素,所有n-1条目将被馈送到map
更新:
数组名称是events而不是event,因此它应该是events.lengthhmm您可以尝试使用此名称
res.data.resultSet.homeTask.forEach(element => {
if(!element.task)
return false;
...bla bla bla
}
嗯,你可以试试这个
res.data.resultSet.homeTask.forEach(element => {
if(!element.task)
return false;
...bla bla bla
}
map方法创建一个新数组,其结果是为每个数组元素调用一个函数 所以它从源数组创建一个长度相同的数组 你需要的是过滤器 像这样的东西
const tasks = res.data.resultSet.homeTask.filter((element) => {
const { task, taskDuration, status } = element;
return task && taskDuration && status;
});
map方法创建一个新数组,其结果是为每个数组元素调用一个函数 所以它从源数组创建一个长度相同的数组 你需要的是过滤器 像这样的东西
const tasks = res.data.resultSet.homeTask.filter((element) => {
const { task, taskDuration, status } = element;
return task && taskDuration && status;
});
我发布并删除了相同的答案,但是当根据问题使用map时,这会产生问题,因为结果数组将有代码中提到的最后一个未定义的元素。我认为他很困惑。我发布并删除了相同的答案,但当根据问题使用map时,这会产生问题,因为结果数组将有最后一个未定义的元素。代码中提到了forEach。我想他是糊涂了。当我把这个道具从孩子的父母传给另一个孩子的时候……我有一个表格,每一行代表一个对象,它有一个按钮,当我点击按钮时,它应该传递这个键,而那一行意味着一个对象……我不想把它添加到另一个变量中,尽管我可以很容易地做到,所以你不能传递吗{key:'something',items:[]}?而不是将其全部合并到一个数组中?是的,它确实解决了问题,尽管我必须改变很多事情,因为现在它不是数组,而是对象在这个对象中我有数组…改变数据结构需要大量的工作,无论我在何处使用这些相同的数据…虽然它解决了问题,当我把这个道具从孩子的父母那里传过来rChild…..我有一个表,其中每一行表示对象,当我单击按钮时,它有一个按钮,它应该传递这个键,而那一行表示单个对象…..我不想将它添加到另一个变量中,尽管我可以轻松地做到这一点,所以您不能传递{key:'something',items:[]}?而不是将其全部合并到一个数组中?是的,它确实解决了问题,尽管我必须更改很多东西,因为现在它不是数组,而是这个对象中的对象我有数组…更改数据结构需要大量的工作,无论我在何处使用相同的数据…尽管它解决了问题Events.slice0,event.length-1.mapevent=>{};其中每个事件未能编译Events.js第382行:意外使用“event”无限制全局变量第393行:意外使用“eve”
nt’no restricted Globals你可以提供一个输入和输出示例,这样我也可以进行测试,比如说我有一些活动[{任务:房屋清洁,任务持续时间:60,状态:n/a},{任务:垃圾倾倒,任务持续时间:30,状态:n/a},{任务:洗碗,任务持续时间:80,状态:n/a},{地址:90/1,伦敦公园街路,地标:内维尔工作室}]现在最后一个对象是keyvar事件=[{任务:房屋清洁,任务持续时间:60,状态:n/a},{任务:垃圾倾倒,任务持续时间:30,状态:n/a},{任务:洗碗,任务持续时间:80,状态:n/a},{地址:90/1,伦敦公园街路,地标:内维尔工作室}];console.logevents.slice0,events.length-1.mapevent=>event.task;同样在events.slice0中,event.length-1.mapevent=>{};event.length错误,应该是events.length just FYIevents.slice0,event.length-1.mapevent=>{};如果每个事件未能编译Events.js第382行:意外使用“event”无限制全局第393行:意外使用“event”无限制全局能否提供示例输入和输出,以便我也可以进行测试让我们假设我有事件[{task:house cleaning,taskDuration:60,status:n/a},{任务:垃圾倾倒,任务持续时间:30,状态:n/a},{任务:洗碗,任务持续时间:80,状态:n/a},{地址:90/1,伦敦公园街路,地标:内维尔工作室}]现在最后一个对象是keyvar事件=[{任务:房屋清洁,任务持续时间:60,状态:n/a},{任务:垃圾倾倒,任务持续时间:30,状态:n/a},{任务:洗碗,任务持续时间:80,状态:n/a},{地址:伦敦公园街路90/1,地标:内维尔工作室}];console.logevents.slice0,events.length-1.mapevent=>event.task;也在events.slice0,event.length-1.mapevent=>event.task中{};event.length错误,应该是events.length just FYIconsole.log此事件:+events.slice0,event.length-1.sorta,b=>a.expecteded.split':'.reverse.join.localeCompareb.expecteded.split':'.reverse.join;在这种情况下,您将如何避免console.logthis事件:+event.slice0,event.length-1.sorta,b=>a.expecteded.split':'.rev'erse.join.localeCompareb.Expecteded.split':'.reverse.join;在这种情况下您将如何避免让我把这个直接的结果集有homeTask,它是一个对象列表我只是把这些对象放入一个数组,然后resultSet有homeTaskKey现在它与homeTask关联如果我遍历这个数组,整个列表表中的每一行都有一个butt在点击按钮时,它应该发送单个对象表示行+整个数组的键表示homeTaskKey……。但是在一个表中,我不希望有一行表示homeTaskKey,如果我不切片它,那么它将给我的键工具集我放这个直接的结果集有homeTask,这是一个对象列表,我只是将这些对象放入一个数组,然后en resultSet有homeTaskKey现在这是与homeTaskKey关联的整个列表如果我在这个数组上迭代,表中的每一行都有一个按钮,单击按钮它应该发送单个对象表示行+整个数组的键表示homeTaskKey……。但是在表中,如果我不切片它,我不希望有homeTaskKey的行,然后它会被删除我也会把钥匙给你