Tôi muốn chuyển đổi chuỗi sau '14 2'thành một mảng hai số nguyên. Tôi làm nó như thế nào ?
Câu trả lời:
Bạn có thể .split()lấy một mảng chuỗi , sau đó lặp lại để chuyển chúng thành số, như sau:
var myArray = "14 2".split(" ");
for(var i=0; i<myArray.length; i++) { myArray[i] = +myArray[i]; }
//use myArray, it's an array of numbers
Đây +myArray[i]chỉ là một cách nhanh chóng để thực hiện chuyển đổi số, nếu bạn chắc chắn rằng chúng là số nguyên, bạn chỉ có thể thực hiện:
for(var i=0; i<myArray.length; i++) { myArray[i] = parseInt(myArray[i], 10); }
myArray.forEach(function(x,y,z){ z[y]=x|0 })
.min.jsvà .jsnếu bạn muốn tiết lộ mã của mình ... hãy nhớ rằng việc thu nhỏ không phải là để che khuất (hoặc không nên, vì nó vô dụng đối với điều đó), mà là để giảm chi phí HTTP - tải trang nhanh hơn cho người dùng của bạn.
Một nhanh cho các trình duyệt hiện đại:
'14 2'.split(' ').map(Number);
// [14, 2]`
VẬY ... chủ đề cũ hơn, tôi biết, nhưng ...
@RoccoMusolino đã có một pha bắt bóng đẹp mắt; đây là một giải pháp thay thế:
TL; DR:
const intArray = [...("5 6 7 69 foo 0".split(' ').filter(i => /\d/g.test(i)))]
SAI :"5 6 note this foo".split(" ").map(Number).filter(Boolean); // [5, 6]
Có một lỗ hổng nhỏ trong các giải pháp thanh lịch hơn được liệt kê ở đây, cụ thể là @amillara và @Marcus 'nếu không thì các câu trả lời đẹp đẽ.
Sự cố xảy ra khi một phần tử của mảng chuỗi không giống như số nguyên, có lẽ trong trường hợp không có xác thực trên đầu vào. Đối với một ví dụ giả định ...
Vấn đề:
var effedIntArray = "5 6 7 69 foo".split(' ').map(Number); // [5, 6, 7, 69, NaN]
Vì bạn rõ ràng muốn có một mảng int PURE, đó là một vấn đề. Thành thật mà nói , tôi đã không hiểu điều này cho đến khi tôi sao chép mã SO vào tập lệnh của mình ...: /
Cách khắc phục (hơi-ít-baller) :
var intArray = "5 6 7 69 foo".split(" ").map(Number).filter(Boolean); // [5, 6, 7, 69]
Vì vậy, ngay cả khi bạn có chuỗi int crap, đầu ra của bạn là một mảng số nguyên thuần túy. Những người khác đang thực sự quyến rũ trong hầu hết các trường hợp, nhưng tôi đã muốn cung cấp của tôi chủ yếu là rambly w'actually . Tuy nhiên, nó vẫn chỉ là một lớp lót, đối với tín dụng của tôi ...
Hy vọng nó tiết kiệm thời gian cho ai đó!
.filter(Boolean)với.filter( (x) => !Number.isNaN(x))
var result = "14 2".split(" ").map(function(x){return parseInt(x)});
parseInt().
.mapvà tương tự trong JS trong bất kỳ trình duyệt nào mà không cần thư viện bổ sung.
Một thay thế cho câu trả lời của Tushar Gupta sẽ là:
'14 2'.split(' ').map(x=>+x);
// [14, 2]`
Trong mã golf bạn lưu 1 ký tự. Ở đây toán tử "+" là "cộng một bậc", hoạt động giống như parseInt.
Trước tiên hãy chia chuỗi trên khoảng trắng:
var result = '14 2'.split(' ');
Sau đó chuyển đổi mảng kết quả của chuỗi thành số nguyên:
for (var i in result) {
result[i] = parseInt(result[i], 10);
}
parseInt(), nếu không, bạn có thể nhận được số bát phân trong đó.
0, hoặc 0xnó sẽ ổn.
Điểm chống lại parseInt-approach:
Không cần sử dụng lambdas và / hoặc cung cấp radixtham số cho parseInt, chỉ cần sử dụng parseFloathoặc Numberthay thế.
Lý do:
Nó đang hoạt động:
var src = "1,2,5,4,3";
var ids = src.split(',').map(parseFloat); // [1, 2, 5, 4, 3]
var obj = {1: ..., 3: ..., 4: ..., 7: ...};
var keys= Object.keys(obj); // ["1", "3", "4", "7"]
var ids = keys.map(parseFloat); // [1, 3, 4, 7]
var arr = ["1", 5, "7", 11];
var ints= arr.map(parseFloat); // [1, 5, 7, 11]
ints[1] === "5" // false
ints[1] === 5 // true
ints[2] === "7" // false
ints[2] === 7 // trueNó ngắn hơn.
Nó nhanh hơn một chút và tận dụng lợi thế của bộ nhớ cache, khi parseInt-approach - không :
// execution time measure function
// keep it simple, yeah?
> var f = (function (arr, c, n, m) {
var i,t,m,s=n();
for(i=0;i++<c;)t=arr.map(m);
return n()-s
}).bind(null, "2,4,6,8,0,9,7,5,3,1".split(','), 1000000, Date.now);
> f(Number) // first launch, just warming-up cache
> 3971 // nice =)
> f(Number)
> 3964 // still the same
> f(function(e){return+e})
> 5132 // yup, just little bit slower
> f(function(e){return+e})
> 5112 // second run... and ok.
> f(parseFloat)
> 3727 // little bit quicker than .map(Number)
> f(parseFloat)
> 3737 // all ok
> f(function(e){return parseInt(e,10)})
> 21852 // awww, how adorable...
> f(function(e){return parseInt(e)})
> 22928 // maybe, without '10'?.. nope.
> f(function(e){return parseInt(e)})
> 22769 // second run... and nothing changes.
> f(Number)
> 3873 // and again
> f(parseFloat)
> 3583 // and again
> f(function(e){return+e})
> 4967 // and again
> f(function(e){return parseInt(e,10)})
> 21649 // dammit 'parseInt'! >_<Lưu ý: Trong Firefox parseInthoạt động nhanh hơn khoảng 4 lần, nhưng vẫn chậm hơn những người khác. Trong tổng số: +e< Number< parseFloat<parseInt
let idsArray = ids.split(',').map((x) => parseInt(x));
Giải pháp một dòng tốt hơn:
var answerInt = [];
var answerString = "1 2 3 4";
answerString.split(' ').forEach(function (item) {
answerInt.push(parseInt(item))
});
chúng tôi chức năng phân chia :
var splitresult = "14 2".split(" ");
for(var i=myArray.length; i--;) myArray[i] = myArray[i]|0;bằng cách sử dụng chuyển đổi Bitwise và vòng lặp ngắn