2016-06-18 29 views
0

給定這個數組['1',23,null,46.5,'34e2',false,'true',40],我如何將數字元素除以10,還可以在其中保留非數字元素,而無需修改這些值。 我做了什麼,到目前爲止是這樣的:我該如何劃分數組中的數值元素,同時保留非數字元素的值

var divide = numbers.map(function(x){ 
    if(typeof x === 'number' && isFinite(x)){ 
    return x/10; 
    } 
}); 

console.log(divide); // [undefined, 2.3, undefined, 4.65, undefined, 6: undefined, 7: undefined, 9: 4] 
+1

你只在if語句中返回...只需添加一個else return x – JordanHendrix

回答

3

你的映射函數必須每個元素的返回值,不僅是數字的人

var divide = numbers.map(function(x){ 
    if(typeof x === 'number' && isFinite(x)){ 
     return x/10; 
    } else return x; 
}); 
2

的問題是,Array.prototype.map()將從Array上每次迭代執行的匿名函數中返回一個值,並且沒有要返回的特定值,它將如同任何JavaScript函數–一樣簡單地返回undefined如果特定值爲i沒有提供要返回(如你發現的);所以關鍵是如果該值與if評估的條件不匹配,則返回當前值。

var numbers = ['1', 23, null, 46.5, '34e2', , false, 'true', , 40], 
 
    divide = numbers.map(function(x) { 
 
    if ('string' === typeof x && isFinite(x)) { 
 
     return x/10; 
 
    } else { 
 
     return x; 
 
    } 
 
    }); 
 

 
console.log(divide);

順便說一句,因爲你不使用任何地方this,如果ES6`是你的選擇,你的用戶,你也可以使用箭頭功能:

var numbers = ['1', 23, null, 46.5, '34e2', , false, 'true', , 40], 
 
    divide = numbers.map(x => 'string' === typeof x && isFinite(x) ? x/10 : x); 
 

 
console.log(divide);

參考文獻:

+0

thanx。完美地工作! – deyn80

+0

非常歡迎,我很高興得到了幫助! :) –

2

您在返回的數值,但你是不是辦案,如果x不是一個數字只是如果條件之後添加return x,它將很好地工作:)

var divide = numbers.map(function(x){ 
    if(typeof x === 'number' && isFinite(x)){ 
     return x/10; 
    } 
    return x; 
}); 
相關問題