簡體   English   中英

如何從數組中獲取最后n個元素

[英]How to get last n number of elements from an array an element of that array

我正在使用angular4,嘗試在視圖中顯示數組的某些元素時遇到了很多麻煩。 我懂了 在此處輸入圖片說明

元素的數量可以根據當前月份更改,因此如果是2月,則數組中的元素將僅為M01和M02。 我一直在嘗試在for循環中循環播放,但似乎無法正確執行。 關於如何做的任何想法?

我想得到這樣的東西,在單個屬性中所有以“ M”開頭的值

[0:  M: [...]
     cod_item:...
     cod_condominio:...
...
]

只要是可以循環顯示該元素的數組就可以,無論它是數組還是對象。

您可以使用嵌套循環來檢查當前屬性是否以"M"開頭,將屬性,值設置為對象,將對象推入數組

 const arr = [{M01:1, M02:2, M03:3, A:4, B:5}, {M04:6, M05:7}]; let res = []; let match = "M"; for (let o of Object.values(arr)) { const curr = {}; for (let [key, prop, [k] = key] of Object.entries(o)) { if (k === match) { curr[key] = prop; } } res.push(curr); } console.log(res); 

如果只需要以“ M”開頭的屬性,則可以使用reduce循環遍歷所有對象並僅收集那些元素:

 // data var arr = [{}, { M0:'foo', M1:'bar', M2:'fum', blah:'blah' }, { M0:'foo', blah:'blah', gee:'gee' } ]; // Build an array of objects only containing // properties starting with "M" followed by digits var result = arr.reduce(function(acc, obj) { var o = {}; // Loop over object keys Object.keys(obj).forEach(function(key){ // Collect those matching the required pattern if (/^M\\d+$/.test(key)) { o[key] = obj[key]; } }); // If found some properties, push into accumulator if (Object.keys(o).length) acc.push(o); return acc; }, []); // Show results console.log(result) // Concise var r = arr.reduce((acc, obj) => { var o = {}; Object.keys(obj).forEach(key => { if (/^M\\d+$/.test(key)) o[key] = obj[key]; }); if (Object.keys(o).length) acc.push(o); return acc; }, []); console.log(r) 

下面的解決方案是新手實現的方法。 但這將是技術債務。

下面的代碼段將根據當前月份為您提供一系列元素。

 var d = new Date(); var n = d.getMonth(); a =[] for(i=1;i<=n;i++){ a.push('M'+('0'+(i).toString()).slice(-2)) } console.log(a) 

在角度模板中,同時遍歷對象檢查鍵是否存在於數組中

如果您有權訪問后端,最好的選擇是從后端更改響應,在前端重構響應不是一個好主意。 因此,如果您有權訪問,只需更改響應即可在單獨的列表中獲取所需的項目。

但是,如果您使用第三方並且無權訪問后端代碼,則可以使用類似這樣的方法來僅獲取以“ M”開頭的項目的值:

var a = [
 {
   "M01": 1,
   "M02": 2,
   "code": 44
 },
 {
   "M01": 13,
   "M02": 4,
   "code": 3
 },{
   "M01": 4,
   "M02": 21,
   "code": 11
 }
]

 var t = [];

 for(var i in a){
    for(var j in a[i]){
         if (j[0]=="M") t.push(a[i][j])
     }  
 console.log(t);// it will only have values of items which start with "M"
}

https://jsfiddle.net/f772o781/1/

 const matchStr = (str) => { const matchArr = str.match(/^M(\\d\\d)/i); if (matchArr) return +matchArr[1]; return 0; } const extractor = (month) => (dataArr) => { return dataArr.map((data) => { const tempObj = {}; const keys = Object.keys(data); keys.forEach((key) => { if (matchStr(key) && matchStr(key) > month) return; tempObj[key] = data[key]; }); return tempObj }); } const yourData = [{ M01: '35238', M02: '123121', M03: '132222', cod_item: '1', filtro: 'saldo' }, { M01: '35238', M02: '123121', M03: '132222', cod_item: '1', filtro: 'saldo' }, { M01: '35238', M02: '123121', M03: '132222', cod_item: '1', filtro: 'saldo' } ]; console.log(extractor(2)(yourData)); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM