function fMI(num,arr){
let digit = arr.toString().split('');
let realDigit = digit.map(Number);
console.log("Is RealDigit an array: ",Array.isArray(realDigit));
console.log(realDigit.filter((v,i,a) => (v==num)? i:''));
}
fMI(1,[1, 11, 34, 52, 61]);
// 創建一個函式,該函式接受一個數字和一個數字陣列作為引數 // 并回傳包含給定數字的陣列的數字的索引 // 或回傳一個空串列(如果該數字不屬于任何陣列中的數字)
示例輸出: // console.log(findMatchingIndexes(1, [1, 11, 34, 52, 61]));
// 應該列印:[0, 1, 4]
我正在努力從陣列中回傳值的索引。到目前為止,我撰寫的代碼采用一個數字并將其與函式接受的陣列進行比較。現在,我正處于想要回傳索引的階段,其中陣列值等于函式所采用的數字比較。
我怎樣才能做到這一點,因為在過濾方法之后,我只得到了數字 1 的 3 倍,這是不對的。
function fMI(num:number,arr:number[]){
let digit = arr.toString().split('');
let realDigit = digit.map(Number);
console.log("Is RealDigit an array: ",Array.isArray(realDigit));
console.log(realDigit.filter((v,i,a) => (v==num)? i:''));
}
fMI(1,[1, 11, 34, 52, 61]);
uj5u.com熱心網友回復:
新答案
您可以像這樣使用字串方法includes:
function fMI(num: number, arr: number[]) {
const indexes: number[] = [];
arr.forEach((value, index) => {
if (value.toString().includes(num.toString())) {
indexes.push(index);
}
})
return indexes;
}
fMI(1, [1, 11, 34, 52, 61]); // [0, 1, 4]
舊答案
您可以將 forEach 與作為元素索引的第二個引數一起使用。請注意,您指定arr為數字陣列,因此無需再次將它們轉換為數字。
function fMI(num: number, arr: number[]) {
const indexes: number[] = [];
arr.forEach((value, index) => {
if (value === num) {
indexes.push(index);
}
})
return indexes;
}
你寫的 4 行對邏輯沒有幫助,這就是我洗掉它的原因。如果您想知道原因,請對此答案發表評論,我會回復您的問題。
uj5u.com熱心網友回復:
您可以使用傳統的 for 回圈:
function fMI(num, arr) {
let result = [];
let numArr = arr.map(item => Number(item));
for (var i = 0; i < numArr.length; i ) {
if (numArr[i] == num) {
result.push(i);
}
}
console.log(result);
}
fMI(1, [1, 11, 34, 52, 61]);
uj5u.com熱心網友回復:
這是一個有趣的觀點:
function fMI(num,arr) {
return arr
.map((n) => n.toString().split('')
.map((m) => parseInt(m)))
.map((o, i) => o.some((p) => p === num) ? i : null)
.filter((f) => f !== null);
}
const result = fMI(1,[1, 11, 34, 52, 61]);
console.log(result);
首先,我們遍歷陣列中的所有數字,將它們轉換為字串并拆分它們以用數字陣列替換原始數字。然后我們通過 parseInt 運行這些數字陣列,它將它們轉換為數字陣列。最后,我們使用.some檢查數字陣列中的任何數字是否為 num 并回傳一個索引陣列或空值陣列,我們通過過濾器運行該陣列以洗掉空值,最后我們回傳一個索引陣列,其中任何數字的位置數字與 num 相同。
uj5u.com熱心網友回復:
您可以將此方法注入到您的陣列原型中,如下所示:
Array.prototype.filterMapIndex = function(expression){
const indexs = []
this.filter((newval,index,full)=>{
if(expression(newval,index,full)) indexs.push(index)
})
return indexs
}
接下來,您可以通過呼叫方法簡單地使用它:
let myArray = [1,2,3,4,0,3];
const indexes = myArray.filterMapIndex((val)=>{ return val>0 })
Array.prototype.filterMapIndex = function(expression){
const indexs = []
this.filter((newval,index,full)=>{
if(expression(newval,index,full)) indexs.push(index)
})
return indexs
}
let myArray = [1,2,3,4,0,3];
const indexes = myArray.filterMapIndex((val)=>{ return val>0 })
console.log(indexes)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/489416.html
標籤:javascript 数组 打字稿
