[英]Iterate over array of object using map till the second last object
我有一個對象數組,其中除最后一個對象外,所有對象都具有相同的鍵。 認為像數組一樣具有值,並總體上表示所有這些值,我有一個鍵,最后將鍵與數組中的值一起按下。
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
。
當我使用map
遍歷events
我想跳過最后一個對象,因為它沒有像task,taskDuration和status這樣的鍵。 因此,當我獲取這些值時不會有任何問題。
您仍然可以使用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推到最后。 切片很淺,因此可以安全地在您的道具上執行。
或最重要的是,問問自己為什么擁有一個完全奇怪的數據結構,並在其末尾附加了密鑰。 也許重新考慮您的數據,而不是首先為您自己創建此問題。
events.slice(0, events.length-1).map(<function>);
這將忽略最后一個元素,所有n-1個條目都將被饋送到地圖
更新 :
數組名稱是事件而非事件,因此應為events.length
res.data.resultSet.homeTask.forEach((element,index) => {})
函數的第二個參數是索引,可以通過將其與數組的總長度進行比較來使用它來標識倒數第二個元素。
嗯,你可以試試這個
res.data.resultSet.homeTask.forEach(element => {
if(!element.task)
return false;
...bla bla bla
}
map()方法創建一個新數組,並為每個數組元素調用一個函數。
因此,它從源數組創建了一個相同長度的數組。
您需要的是filter() https://developer.mozilla.org/zh-CN/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;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.