จะเชื่อมต่อตัวเลขสองตัวใน JavaScript ได้อย่างไร?


108

ฉันต้องการหาสิ่งที่ต้องการ5 + 6ที่จะกลับมาแทน"56"11


3
แน่นอนคุณมีคำตอบมากมาย ฉันโหวตคนที่ถูกต้องทั้งหมด
เดวิด

หลายคำตอบมีสตริงว่างอยู่ตรงกลาง ดูเหมือนจะแปลกและฉันก็สงสัยว่าทำไมใคร ๆ ก็ชอบ การมีเครื่องหมายคำพูดขึ้นต้นจะบ่งบอกถึงความตั้งใจได้อย่างรวดเร็วและดูเหมือนว่าจะสมเหตุสมผลกว่าเนื่องจากไม่ต้องใช้ความคิดเพิ่มเติมในกรณีที่ต้องต่อตัวเลขมากกว่าสองตัว ฉันคิดว่าผู้มีสิทธิเลือกตั้งเห็นด้วย แต่เพียงแค่สงสัยว่ามีเหตุผลทางประวัติศาสตร์หรือเหตุผลอื่นใดที่อยู่เบื้องหลังเหตุผลที่อยู่ตรงกลาง
MrBoJangles

คำตอบ:


153

ใช้"" + 5 + 6บังคับให้เข้ากับสตริง สิ่งนี้ใช้ได้กับตัวแปรตัวเลขเช่นกัน:

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


โอเคการแทนที่ค่า 5 และ 6 อยู่ในสองตัวแปร: var1 = 5; var2 = 6; จะยังใช้ได้ไหม
Heidi

4
คำตอบนี้ควรได้รับการแก้ไขแน่นอนว่านี่เป็นแนวทางที่ดีกว่า const numbersAsString = `${5}${6}`;
Pavol Travnik


26

ตอนนี้คุณสามารถใช้ประโยชน์จากแม่แบบES6ได้

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

หรือถ้าคุณมีตัวแปร:

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

console.log(numbersAsString); // Outputs 56

โดยส่วนตัวแล้วฉันพบว่าไวยากรณ์ใหม่ชัดเจนกว่ามากแม้ว่าจะละเอียดกว่าเล็กน้อย






11

ฉันรู้ว่านี่เป็นโพสต์เก่าและได้รับคำตอบหลายครั้ง ฉันก็สงสัยเหมือนกันว่า JavaScript มีฟังก์ชันที่จะทำสิ่งนี้ได้หรือไม่ ฉันกำลังเขียนโปรแกรมทางคณิตศาสตร์และจำเป็นต้องต่อตัวเลขสองตัวเข้าด้วยกัน

แล้วถ้าผมต้องการรวมเลขสองตัว 17 กับ 29 เข้าด้วยกันแน่นอนว่าผมสามารถเปลี่ยนมันให้เป็นสตริงและเชื่อมมันเข้าด้วยกันจากนั้นเปลี่ยนสตริงใหม่กลับเป็นตัวเลข ดูเหมือนว่าจะใช้งานได้ดีและฉันสามารถใช้โค้ดของฉันต่อไปได้ แต่ลองดูที่นี่และลองคิดว่าเกิดอะไรขึ้นที่นี่

เรากำลังทำอะไรกับตัวเลขสองตัวนี้เราจะเอา 17 กับ 29 ไปเปลี่ยนเป็นหนึ่งพันเจ็ดร้อยยี่สิบเก้าได้อย่างไร? ทีนี้เราก็คูณ 17 ด้วย 100 แล้วบวก 29 แล้ว 172 กับ 293 จะได้หนึ่งแสนเจ็ดหมื่นสองพันสองร้อยเก้าสิบสามได้อย่างไร? คูณ 172 ด้วย 1000 แล้วบวก 293 แล้วมีแค่ 2 กับ 9 ล่ะ? คูณ 2 ด้วย 10 แล้วบวก 9 เพื่อรับ 29

ดังนั้นหวังว่าตอนนี้รูปแบบน่าจะชัดเจนสำหรับคุณ เราสามารถคิดค้นสูตรทางคณิตศาสตร์เพื่อทำการคำนวณนี้แทนการใช้สตริง ในการเชื่อมเลขสองตัวใด ๆ a และ b เราต้องนำผลคูณของ a และ 10 มารวมกับความยาว b แล้วบวก b

แล้วเราจะได้ความยาวของเลข b ได้อย่างไร? ทีนี้เราเปลี่ยน b ให้เป็นสตริงและได้คุณสมบัติความยาวของมัน

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

แต่จะต้องมีวิธีที่ดีกว่านี้ในการทำสิ่งนี้โดยไม่ต้องมีสายใช่ไหม? ใช่มี.

ป้อนคำอธิบายภาพที่นี่

สำหรับสองจำนวนใด ๆ a และ b โดยมีฐาน B ใด ๆ เราจะคูณ a ด้วยฐาน B ด้วยกำลังของความยาว b (โดยใช้ฐานล็อกของ b จากนั้นปูพื้นเพื่อให้ได้จำนวนเต็มที่ใกล้ที่สุดจากนั้นจึงเพิ่ม 1 เข้าไป) จากนั้นเพิ่ม b

ตอนนี้รหัสของเรามีลักษณะดังนี้:

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

แต่เดี๋ยวก่อนถ้าฉันต้องการทำสิ่งนี้ในฐาน 2 หรือฐาน 8 ล่ะ? ฉันจะทำเช่นนั้นได้อย่างไร? เราไม่สามารถใช้สูตรของเราที่เราเพิ่งสร้างขึ้นด้วยฐานอื่น ๆ แต่เป็นฐาน 10 วัตถุ JavaScript Math มีฟังก์ชันในตัวสำหรับฐาน 10 และ 2 อยู่แล้ว (เฉพาะ Math.log) แต่เราจะรับฟังก์ชันบันทึกสำหรับสิ่งใด ๆ ฐานอื่น ๆ ? เราแบ่งบันทึกของ b ด้วยบันทึกของฐานMath.log(b) / Math.log(base).

ตอนนี้เรามีรหัสตามคณิตศาสตร์ที่ทำงานได้อย่างสมบูรณ์สำหรับการเชื่อมต่อตัวเลขสองตัว:

    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

หากคุณรู้ว่าคุณกำลังจะทำคณิตศาสตร์ฐาน 10 เท่านั้นคุณสามารถเพิ่มการตรวจสอบฐานที่ไม่ได้กำหนดแล้วตั้งค่าฐาน = 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

เพื่อให้ง่ายขึ้นสำหรับฉันฉันใช้ต้นแบบเพื่อเพิ่มฟังก์ชันให้กับวัตถุ 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



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

แปลงกลับเป็นเลขแบบนี้ ..

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

เอาต์พุต 1245

- แก้ไข -

ขอโทษ

สำหรับการใช้งานของฉันสิ่งนี้ยังไม่ได้ผลสำหรับฉันหลังจากการทดสอบ ฉันต้องเพิ่มศูนย์ที่หายไปกลับเข้าไปในขณะที่มันถูกลบออกในตัวเลขที่เล็กกว่า 10 การใช้งานของฉันคือการปล่อยให้รหัสทำงานในบางช่วงเวลาอาจไม่ถูกต้อง แต่ดูเหมือนว่าจะใช้งานได้ (จนถึงตอนนี้)

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;

}

โหวตลงได้ดีขอบคุณ :)

ฉันยังใหม่กับสิ่งนี้และมาที่นี่เพื่อเรียนรู้คำอธิบายจากพวกคุณว่าทำไมถึงดี

ยังคงอัปเดตรหัสของฉันเพื่อแสดงว่าฉันแก้ไขปัญหาของฉันได้อย่างไรเนื่องจากโพสต์นี้ช่วยฉันคิดออก


0

ฉันชอบconcatวิธี:

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

คุณยังสามารถใช้อาร์เรย์ซึ่งสามารถช่วยได้ในบางกรณีการใช้งาน:

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

0

คุณสามารถส่งคืนตัวเลขโดยใช้เคล็ดลับนี้:
ไม่แนะนำ

[a] + b - 0

ตัวอย่าง:

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

0

เพื่อเพิ่มคำตอบทั้งหมดข้างต้นฉันต้องการแบ่งปันตรรกะพื้นหลัง:

Plusเป็นตัวดำเนินการเพิ่มเติมที่ใช้สำหรับการต่อสายอักขระ เมื่อเราต้องการต่อตัวเลข ควรเป็นความเข้าใจที่เราต้องการต่อสตริงเนื่องจากการต่อตัวเลขไม่ได้ทำให้เกิดกรณีการใช้งานที่ถูกต้องสำหรับฉัน

เราสามารถบรรลุได้หลายวิธี

ผ่านการแปลงประเภท

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

สิ่งนี้จะทำงานและทำการแปลงประเภทในพื้นหลัง

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

หากคุณมุ่งมั่นที่จะเชื่อมสตริงสองสตริงเข้าด้วยกันและชนิดของเอาต์พุตควรเป็น int parseInt () จะทำงานที่นี่

parseInt(5 +""+ 5)  //Output 55 Type "number"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.