我有一个对象数组,其中除最后一个对象外,所有对象都具有相同的键。认为像数组一样具有值,并总体上表示所有这些值,我有一个键,最后将键与数组中的值一起按下。
homeTask 是对象列表,这些对象是值,而 homeTaskKey 是表示homeTask的键
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方法,其中我将数组设置为状态变量名称为events
,这是数组类型。
当我使用events
遍历map
时,我想跳过最后一个对象,因为它没有像task,taskDuration和status这样的键。因此,当我获取这些值时,它不会有任何问题。
答案 0 :(得分:1)
您仍然可以使用map
,但是只需在地图完成后弹出最后一个元素。例如:
const newEvents = homeTask.map(({ task, taskDuration, status }) => ({
task, taskDuration, status
}))
newEvents.pop()
addEvent(newEvents)
或者只用任务密钥替换最后一个项目,因为您知道最后一个项目将是垃圾:
newEvents[newEvents.length - 1] = res.data.resultSet.homeTaskKey
或者在映射之前仅slice
个数组,然后像执行操作一样将taskKey推到末尾。切片很浅,可以安全地在道具上执行。
或者最重要的是,问问自己为什么拥有一个完全奇怪的数据结构,并在其末尾附加了密钥。也许首先要重新考虑您的数据,而不是首先为您自己创建此问题。
答案 1 :(得分:1)
events.slice(0, events.length-1).map(<function>);
这将忽略最后一个元素,所有n-1个条目都将被送入地图
更新:
数组名称是事件而非事件,因此应为events.length
答案 2 :(得分:0)
res.data.resultSet.homeTask.forEach((element,index) => {})
函数的第二个参数是索引,可以通过与数组的总长度进行比较来确定倒数第二个元素。
答案 3 :(得分:0)
嗯,您可以尝试
res.data.resultSet.homeTask.forEach(element => {
if(!element.task)
return false;
...bla bla bla
}
答案 4 :(得分:0)
map()方法创建一个新数组,并为每个数组元素调用一个函数。
因此它从源数组创建了一个相同长度的数组。
您需要的是filter() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
这样的事情;
const tasks = res.data.resultSet.homeTask.filter((element) => {
const { task, taskDuration, status } = element;
return task && taskDuration && status;
});