การตรวจสอบ :
- การดำเนินการตั้งค่าสามารถเข้าใจได้ว่าเป็นสแน็ปช็อตภายในสตรีมการดำเนินการ
- เราไม่ได้อยู่ก่อนการทดแทนที่ชัดเจน
- องค์ประกอบของคลาส Setไม่มีดัชนีที่สามารถเข้าถึงได้
- Set classเป็นส่วนเสริมคลาส Arrayซึ่งมีประโยชน์ในสถานการณ์เหล่านั้นที่เราต้องจัดเก็บคอลเลคชันที่จะใช้การเพิ่มขั้นพื้นฐานการลบการตรวจสอบและการทำซ้ำ
ฉันแบ่งปันการทดสอบประสิทธิภาพบางอย่าง ลองเปิดคอนโซลของคุณและคัดลอกโค้ดด้านล่างนี้
การสร้างอาร์เรย์ (125000)
var n = 125000;
var arr = Array.apply( null, Array( n ) ).map( ( x, i ) => i );
console.info( arr.length );
1. การค้นหาดัชนี
เราเปรียบเทียบวิธี has ของ Set กับ Array indexOf:
Array / indexOf (0.281ms) | ตั้งค่า / มี (0.053ms)
var checkArr = ( arr, item ) => arr.indexOf( item ) !== -1;
var checkSet = ( set, item ) => set.has( item );
var set, result;
console.time( 'timeTest' );
result = checkArr( arr, 123123 );
console.timeEnd( 'timeTest' );
set = new Set( arr );
console.time( 'timeTest' );
checkSet( set, 123123 );
console.timeEnd( 'timeTest' );
2. การเพิ่มองค์ประกอบใหม่
เราเปรียบเทียบวิธีการเพิ่มและพุชของวัตถุ Set และ Array ตามลำดับ:
อาร์เรย์ / พุช (1.612ms) | ตั้งค่า / เพิ่ม (0.006ms)
console.time( 'timeTest' );
arr.push( n + 1 );
console.timeEnd( 'timeTest' );
set = new Set( arr );
console.time( 'timeTest' );
set.add( n + 1 );
console.timeEnd( 'timeTest' );
console.info( arr.length );
console.info( set.size );
3. การลบองค์ประกอบ
เมื่อลบองค์ประกอบเราต้องจำไว้ว่า Array และ Set ไม่ได้เริ่มต้นภายใต้เงื่อนไขที่เท่าเทียมกัน อาร์เรย์ไม่มีเมธอดดั้งเดิมดังนั้นจึงจำเป็นต้องมีฟังก์ชันภายนอก
อาร์เรย์ / deleteFromArr (0.356ms) | ตั้งค่า / ลบ (0.019ms)
var deleteFromArr = ( arr, item ) => {
var i = arr.indexOf( item );
i !== -1 && arr.splice( i, 1 );
};
console.time( 'timeTest' );
deleteFromArr( arr, 123123 );
console.timeEnd( 'timeTest' );
set = new Set( arr );
console.time( 'timeTest' );
set.delete( 123123 );
console.timeEnd( 'timeTest' );
อ่านบทความฉบับเต็มได้ที่นี่