我有這種情況,我有一個陣列,我需要對其進行過濾并獲取過濾項的索引,如下例所示:
var arr = ['2022-05', '2023-01', '2022-04', '2022-02', '2023-08'];
我正在使用這個過濾器:
var filter = arr.filter(e => e.split("-")[0] == '2022'); //To get the values from 2022
我得到了這個結果:
filter = ['2022-05', '2022-04', '2022-02'];
我現在需要做的是獲取這些專案的索引,所以它會是這樣的:
filter = ['2022-05', '2022-04', '2022-02'];
index = [0,2,3]
我怎樣才能做到這一點?謝謝。
uj5u.com熱心網友回復:
在過濾陣列之前,您可以將其映射到包含索引的新物件陣列。
var arr = ['2022-05', '2023-01', '2022-04', '2022-02', '2023-08'];
var output = arr.map((value, index) => ({index, value}))
.filter(e => e.value.split("-")[0] == '2022');
console.log(output);
uj5u.com熱心網友回復:
匹配時,只需將所需的索引添加到陣列中
var arr = ['2022-05', '2023-01', '2022-04', '2022-02', '2023-08'];
var index = [];
var filter = arr.filter((e, indx) => {
const flag = e.split("-")[0] == '2022';
if (flag) {
index.push(indx)
}
return flag;
});
console.log(filter)
console.log(index)
uj5u.com熱心網友回復:
您可以將條件檢查提取到回呼函式中(為簡單起見),然后reduce在陣列上并將條件所在的索引推true送到累加器陣列中。
var arr = ['2022-05', '2023-01', '2022-04', '2022-02', '2023-08'];
const condition = (e) => e.split("-")[0] == '2022'
const filter = arr.filter(condition)
const indexes = arr.reduce((a,b,i) => (condition(b) ? a.push(i) : '', a), [])
console.log(filter, indexes)
uj5u.com熱心網友回復:
您可以使用以下indexOf方法:
filter.map(el => arr.indexOf(el));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/473407.html
標籤:javascript 筛选 减少
