Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

จะตรวจสอบได้อย่างไรว่าทุกคุณสมบัติบนวัตถุนั้นซ้ำกันใน JavaScript หรือไม่


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

ตัวอย่างเช่น − หากวัตถุคือ −

const obj = {
   a: 1,
   b: 1,
   c: {
      aa: 1
   }
};

จากนั้นฟังก์ชันควรคืนค่า จริง เนื่องจากคีย์สิ้นสุดทั้งหมดมีค่าเท่ากัน (1) ดังนั้น เรามาเขียนวิธีแก้ปัญหาแบบเรียกซ้ำสำหรับปัญหานี้กัน

ตัวอย่าง

const obj = {
   a: 1,
   b: 1,
   c: {
      aa: 3
   }
};
const allSame = (obj, value) => {
   const keys = Object.keys(obj);
   for(let i = 0; i < keys.length; i++){
      if(typeof obj[keys[i]] === "object" &&
      !Array.isArray(obj[keys[i]])){
         return allSame(obj[keys[i]], value);
      };
      if(!value){
         value = obj[keys[i]];
         continue;
      }
      if(obj[keys[i]] !== value){
         return false;
      };
   };
   return true;
}
console.log(allSame(obj));
console.log(allSame({ a: 1, b: 1, c: { aa: 1 } }));
console.log(allSame({ a: { x: 1 }, b: 1, c: { aa: 1 } }));
console.log(allSame({ a: 1, b: 1, c: { aa: 2 } }));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น -

false
true
true
false