Làm thế nào để nối hai số trong javascript?


107

Tôi muốn một cái gì đó giống như 5 + 6trả lại "56"thay vì 11.


3
Chà, bạn chắc chắn có rất nhiều câu trả lời. Tôi đang bỏ phiếu cho tất cả những người chính xác.
David

một số câu trả lời có chuỗi trống ở giữa. Có vẻ kỳ lạ và tôi đã tự hỏi tại sao điều đó sẽ phù hợp hơn với bất kỳ ai. Việc có dấu ngoặc kép ở đầu cho biết nhanh chóng ý định và dường như có ý nghĩa hơn vì nó không cần phải suy nghĩ thêm trong trường hợp phải nối nhiều hơn hai số. Tôi cho rằng các cử tri đồng ý, nhưng chỉ tự hỏi liệu có bất kỳ lý do lịch sử hay lý do nào khác đằng sau sự hợp lý ở giữa hay không.
MrBoJangle

Câu trả lời:


152

Sử dụng "" + 5 + 6để buộc nó vào chuỗi. Điều này cũng hoạt động với các biến số:

var a = 5;
var b = 6;
console.log("" + a + b);


Ok vì vậy, việc bổ sung các giá trị 5 và 6 là hai biến: var1 = 5; var2 = 6; nó sẽ vẫn hoạt động
Heidi

3
Câu trả lời này nên được chỉnh sửa, chắc chắn đây là một cách tiếp cận tốt hơn. const numbersAsString = `${5}${6}`;
Pavol Travnik


26

Bây giờ bạn có thể sử dụng các ký tự mẫu ES6 .

const numbersAsString = `${5}${6}`;
console.log(numbersAsString); // Outputs 56

Hoặc, nếu bạn có các biến:

const someNumber = 5;
const someOtherNumber = 6;
const numbersAsString = `${someNumber}${someOtherNumber}`;

console.log(numbersAsString); // Outputs 56

Cá nhân tôi thấy cú pháp mới rõ ràng hơn nhiều, mặc dù hơi dài dòng.






11

Tôi biết đây là một bài viết cũ và đã được trả lời nhiều lần. Tôi cũng đã tự hỏi liệu JavaScript có một chức năng nào làm được điều này hay không. Tôi đang thực hiện một số lập trình toán học và cần nối hai số.

Vì vậy, điều gì xảy ra nếu tôi cần kết hợp hai số 17 và 29. Chắc chắn tôi có thể biến chúng thành chuỗi và nối chúng sau đó biến chuỗi mới trở lại thành một số. Điều đó có vẻ hoạt động khá tốt và tôi có thể tiếp tục với mã của mình, nhưng chúng ta hãy xem ở đây và cố gắng tìm ra những gì đang thực sự xảy ra ở đây.

Chúng ta đang làm gì với hai số này, làm thế nào để lấy 17 và 29 và biến nó thành một nghìn bảy trăm hai mươi chín? Chúng ta có thể nhân 17 với 100 rồi cộng 29. Và 172 và 293 thì sao để có một trăm bảy mươi hai nghìn hai trăm chín mươi ba? Nhân 172 với 1000 và cộng 293. Nhưng chỉ 2 và 9 thì sao? Nhân 2 với 10 rồi thêm 9 để được 29.

Vì vậy, hy vọng bây giờ một khuôn mẫu sẽ rõ ràng với bạn. Chúng ta có thể nghĩ ra một công thức toán học để thực hiện phép tính này thay vì chỉ sử dụng chuỗi. Để ghép hai số a và b bất kỳ, ta cần lấy tích của a và 10 thành lũy thừa của độ dài b rồi cộng b.

Vậy làm thế nào để nhận được độ dài của số b? Chà, chúng ta có thể biến b thành một chuỗi và lấy thuộc tính độ dài của nó.

    a * Math.pow(10, new String(b).length) + b;

Nhưng phải có một cách tốt hơn để làm điều này mà không cần dây, phải không? Có, có.

nhập mô tả hình ảnh ở đây

Với hai số bất kỳ, a và b, với bất kỳ cơ số B. Chúng ta sẽ nhân a với cơ số B với lũy thừa của độ dài b (sử dụng cơ số log của b sau đó xếp chồng lên nhau để có được số nguyên gần nhất rồi cộng 1 với nó) sau đó thêm b.

Vì vậy, bây giờ mã của chúng tôi trông giống như sau:

    a * Math.pow(10, Math.floor(Math.log10(b)) + 1) + b;

Nhưng chờ đã, nếu tôi muốn làm điều này ở cơ sở 2 hoặc cơ sở 8 thì sao? Làm thế nào tôi có thể làm điều đó? Chúng ta không thể sử dụng công thức mà chúng ta vừa tạo với bất kỳ cơ số nào khác ngoài cơ số 10. Đối tượng JavaScript Math đã có sẵn các hàm cho cơ sở 10 và 2 (chỉ Math.log), nhưng làm cách nào để chúng ta có được các hàm log cho bất kỳ cơ sở khác? Chúng ta chia log của b cho log của cơ số.Math.log(b) / Math.log(base).

Vì vậy, bây giờ chúng tôi có mã dựa trên toán học hoạt động đầy đủ của chúng tôi để nối hai số:

    function concatenate(a, b, base) {
        return a * Math.pow(base, Math.floor(Math.log(b) / Math.log(base)) + 1) + b;
    }
    var a = 17, var b = 29;
    var concatenatedNumber = concatenate(a, b, 10);
    // concatenatedNumber = 1729

Nếu bạn biết rằng bạn sẽ chỉ làm toán cơ sở 10, bạn có thể thêm một kiểm tra cho cơ sở là không xác định sau đó đặt base = 10:

    function concatenate(a, b, base) {
        if(typeof base == 'undefined') {
            base = 10;
        }
        return a * Math.pow(base, Math.floor(Math.log(b) / Math.log(base)) + 1) + b;
    }

    var a = 17, b = 29;
    var newNumber = concatenate(a, b); // notice I did not use the base argument
    // newNumber = 1729

Để giúp tôi dễ dàng hơn, tôi đã sử dụng nguyên mẫu để thêm hàm vào đối tượng Number:

    Number.prototype.concatenate = function(b, base) {
        if(typeof base == 'undefined') {
                base = 10;
        }
        return this * Math.pow(base, Math.floor(Math.log(b) / Math.log(base)) + 1) + b;
    };
    var a = 17;
    var newNumber = a.concatenate(29);
    // newNumber = 1729

8

Bạn cũng có thể sử dụng toStringhàm để chuyển đổi nó thành chuỗi và nối.

var a = 5;
var b = 6;
var value = a.toString() + b.toString();

4

Một khả năng khác có thể là:

var concat = String(5) + String(6);

2
enter code here
var a = 9821099923;
var b = 91;
alert ("" + b + a); 
// after concating , result is 919821099923 but its is now converted 
into string  

console.log(Number.isInteger("" + b + a))  // false

 you have to do something like below:- 

var c= parseInt("" + b + a)
console.log(c); // 919821099923
console.log(Number.isInteger(c)) // true


1

Tôi đã chuyển đổi lại thành số như thế này ..

const timeNow = '' + 12 + 45;
const openTime = parseInt(timeNow, 10);

sản lượng 1245

-- biên tập --

lấy làm tiếc,

đối với việc sử dụng của tôi, điều này vẫn không hoạt động đối với tôi sau khi thử nghiệm. Tôi đã phải thêm lại số 0 bị thiếu vì nó đang bị xóa trên các số nhỏ hơn 10, mục đích sử dụng của tôi là để cho mã chạy vào những thời điểm nhất định Có thể không đúng nhưng nó có vẻ hoạt động (cho đến nay).

h = new Date().getHours();
m = new Date().getMinutes();
isOpen: boolean;

timeNow = (this.m < 10) ? '' + this.h + 0 + this.m : '' + this.h + this.m;

openTime = parseInt(this.timeNow);


closed() {

(this.openTime >= 1450 && this.openTime <= 1830) ? this.isOpen = true : 
this.isOpen = false;
(this.openTime >= 715 && this.openTime <= 915) ? this.isOpen = true : 
this.isOpen = false;

}

Cuộc bỏ phiếu xuống rất hay, cảm ơn bạn :)

Tôi mới làm quen với điều này và đến đây để tìm hiểu từ các bạn một lời giải thích về lý do tại sao sẽ tốt.

Dù sao cũng cập nhật mã của tôi để hiển thị cách tôi khắc phục sự cố của mình vì bài đăng này đã giúp tôi tìm ra nó.


0

Tôi thích concatcách:

const numVar1 = 5;
const numVar2 = 6;
const value = "".concat(numVar1, numVar2);
// or directly with values
const value2 = "".concat(5, 6);

Bạn cũng có thể sử dụng một mảng có thể trợ giúp trong một số trường hợp sử dụng:

const value3 = [5, 6, numVar1].join('');

0

Bạn có thể trả lại một số bằng cách sử dụng thủ thuật này:
không nên

[a] + b - 0

Thí dụ :

let output = [5] + 6 - 0;
console.log(output); // 56
console.log(typeof output); // number

0

Để thêm vào tất cả các câu trả lời ở trên, tôi muốn chia sẻ logic cơ bản:

Plus là một toán tử bổ sung cũng được sử dụng để nối các chuỗi. Khi chúng ta muốn nối các số. Tôi nên hiểu rằng chúng tôi muốn nối các chuỗi, vì việc nối các số không tạo ra các trường hợp sử dụng hợp lệ đối với tôi.

Chúng ta có thể đạt được điều đó bằng nhiều cách,

Thông qua chuyển đổi loại

let a = 5;
a.toString()+5 // Output 55 type "string"

Điều này cũng sẽ hoạt động và thực hiện chuyển đổi kiểu trong nền,

5 +""+ 5 // Output 55 type "string"

Nếu bạn quyết định nối hai chuỗi và kiểu đầu ra phải là int, thì parseInt () hoạt động ở đây

parseInt(5 +""+ 5)  //Output 55 Type "number"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.