>웹 프론트엔드 >JS 튜토리얼 >EXAMPLE을 사용하는 Javascript의 스프레드 및 나머지 연산자

EXAMPLE을 사용하는 Javascript의 스프레드 및 나머지 연산자

PHPz
PHPz원래의
2024-09-01 21:11:09365검색

Spread and Rest Operator in Javascript with EXAMPLE

나머지 연산자와 스프레드 연산자는 JavaScript의 강력한 기능으로, 배열, 객체 및 함수 인수를 더 효과적으로 사용할 수 있게 해줍니다. 둘 다 동일한 구문(...)을 사용하지만 용도가 다릅니다.

나머지 연산자(...)

나머지 연산자는 나머지 모든 요소를 ​​배열로 수집하는 데 사용됩니다. 이는 일반적으로 다양한 개수의 인수를 처리하기 위해 함수 매개변수에 사용됩니다.

나머지 연산자의 예:


function sum(...numbers) {
    return numbers.reduce((acc, curr) => acc + curr, 0);
}

console.log(sum(1, 2, 3, 4)); // Output: 10


여기에서 ...numbers는 sum 함수에 전달된 모든 인수를 숫자라는 배열로 수집한 후 처리할 수 있습니다.

스프레드 연산자(...)

확산 연산자는 배열이나 개체의 요소를 개별 요소나 속성으로 확장하는 데 사용됩니다.

스프레드 연산자의 예:


const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];

const combinedArray = [...arr1, ...arr2];
console.log(combinedArray); // Output: [1, 2, 3, 4, 5, 6]


이 예에서 ...arr1 및 ...arr2는 arr1 및 arr2의 요소를 새로운 CombinedArray로 확장합니다.

요약

  • 나머지 연산자: 나머지 모든 요소를 ​​배열로 수집합니다.
  • 확산 연산자: 배열이나 객체의 요소를 개별 요소나 속성으로 확장합니다.

이러한 연산자는 배열, 객체, 함수 인수를 깔끔하고 간결하게 처리하는 데 매우 유용합니다.

.
.
.
.
.

Spread 및 Rest 연산자에 대해 자세히 알아보기
.
.
.
.
.

물론이죠! 더 자세한 설명과 예시를 통해 나머지 연산자와 스프레드 연산자에 대해 자세히 알아보고 해당 개념과 다양한 사용 사례를 살펴보겠습니다.

나머지 연산자(...)

나머지 연산자를 사용하면 여러 요소를 수집하여 배열로 묶을 수 있습니다. 일반적으로 함수에서 가변 개수의 인수를 처리하거나 배열이나 객체를 구조 분해할 때 요소의 "나머지"를 수집하는 데 사용됩니다.

사용 사례

  1. 여러 함수 인수 처리: 나머지 연산자는 함수가 얼마나 많은 인수를 받을지 미리 알 수 없을 때 일반적으로 사용됩니다.
   function multiply(factor, ...numbers) {
       return numbers.map(number => number * factor);
   }

   console.log(multiply(2, 1, 2, 3, 4)); 
   // Output: [2, 4, 6, 8]

설명:

  • 요인이 첫 번째 인수입니다.
  • ...numbers는 나머지 인수를 배열 [1, 2, 3, 4]로 수집합니다.
  • 그런 다음 지도 기능은 각 숫자에 인수(2)를 곱합니다.
  1. 배열 파괴: 배열을 분해할 때 나머지 요소를 수집하기 위해 나머지 연산자를 사용할 수 있습니다.
   const [first, second, ...rest] = [10, 20, 30, 40, 50];

   console.log(first);  // Output: 10
   console.log(second); // Output: 20
   console.log(rest);   // Output: [30, 40, 50]

설명:

  • 먼저 값 10을 얻습니다.
  • 두 번째는 값 20을 얻습니다.
  • ...rest는 나머지 요소 [30, 40, 50]를 배열로 수집합니다.
  1. 객체 파괴: 마찬가지로 나머지 연산자를 사용하여 개체의 나머지 속성을 캡처할 수 있습니다.
   const {a, b, ...rest} = {a: 1, b: 2, c: 3, d: 4};

   console.log(a);    // Output: 1
   console.log(b);    // Output: 2
   console.log(rest); // Output: {c: 3, d: 4}

설명:

  • a와 b가 직접 추출됩니다.
  • ...rest는 나머지 속성(c: 3 및 d: 4)을 새 개체에 캡처합니다.

스프레드 연산자(...)

확산 연산자는 배열, 객체 또는 반복 가능 항목의 요소를 개별 요소나 속성으로 확장하는 데 사용됩니다. 이는 나머지 연산자와 반대이며 요소 병합, 복사 및 전달에 매우 유용합니다.

사용 사례

  1. 배열 결합: 스프레드 연산자는 배열을 결합하거나 연결하는 데 사용할 수 있습니다.
   const arr1 = [1, 2];
   const arr2 = [3, 4];
   const arr3 = [5, 6];

   const combined = [...arr1, ...arr2, ...arr3];
   console.log(combined); 
   // Output: [1, 2, 3, 4, 5, 6]

설명:

  • ...arr1, ...arr2 및 ...arr3은 해당 요소를 결합된 배열로 분산시킵니다.
  1. 배열 복사: 스프레드 연산자를 사용하여 배열의 단순 복사본을 만들 수 있습니다.
   const original = [1, 2, 3];
   const copy = [...original];

   console.log(copy);    // Output: [1, 2, 3]
   console.log(copy === original); // Output: false (different references)

설명:

  • ...original은 원본 요소를 새 배열 복사본으로 분산시켜 얕은 복사본을 생성합니다.
  1. 개체 병합: 스프레드 연산자는 객체를 병합하거나 기존 객체에 속성을 추가하는 데 유용합니다.
   const obj1 = {x: 1, y: 2};
   const obj2 = {y: 3, z: 4};

   const merged = {...obj1, ...obj2};

   console.log(merged); // Output: {x: 1, y: 3, z: 4}

설명:

  • ...obj1은 obj1의 속성을 새 객체에 확산시킵니다.
  • ...obj2는 해당 속성을 새 개체에 확산시켜 obj1의 y 속성을 재정의합니다.
  1. 함수 인수: 스프레드 연산자를 사용하여 배열 요소를 함수에 대한 개별 인수로 전달할 수도 있습니다.
   function add(a, b, c) {
       return a + b + c;
   }

   const numbers = [1, 2, 3];

   console.log(add(...numbers)); // Output: 6

설명:

  • ...numbers는 숫자 배열의 요소를 개별 인수(a, b, c)로 분산시킵니다.

요약

  • 휴식 연산자(...):

    • Collects multiple elements into an array or object.
    • Often used in function parameters, array destructuring, or object destructuring.
  • Spread Operator (...):

    • Expands or spreads elements from an array, object, or iterable.
    • Useful for merging, copying, and passing elements in a concise manner.

Both operators enhance code readability and maintainability by reducing boilerplate code and providing more flexible ways to handle data structures.
.
.
.
.
.
.
Real world Example
.
.
.
.

Let's consider a real-world scenario where the rest and spread operators are particularly useful. Imagine you are building an e-commerce platform, and you need to manage a shopping cart and process user orders. Here's how you might use the rest and spread operators in this context:

Rest Operator: Managing a Shopping Cart

Suppose you have a function to add items to a user's shopping cart. The function should accept a required item and then any number of optional additional items. You can use the rest operator to handle this:

function addToCart(mainItem, ...additionalItems) {
    const cart = [mainItem, ...additionalItems];
    console.log(`Items in your cart: ${cart.join(', ')}`);
    return cart;
}

// User adds a laptop to the cart, followed by a mouse and keyboard
const userCart = addToCart('Laptop', 'Mouse', 'Keyboard');

// Output: Items in your cart: Laptop, Mouse, Keyboard

Explanation:

  • mainItem is a required parameter, which in this case is the 'Laptop'.
  • ...additionalItems collects the rest of the items passed to the function ('Mouse' and 'Keyboard') into an array.
  • The cart array then combines all these items, and they are logged and returned as the user's cart.

Spread Operator: Processing an Order

Now, let's say you want to process an order and send the user's cart items along with their shipping details to a function that finalizes the order. The spread operator can be used to merge the cart items with the shipping details into a single order object.

const shippingDetails = {
    name: 'John Doe',
    address: '1234 Elm Street',
    city: 'Metropolis',
    postalCode: '12345'
};

function finalizeOrder(cart, shipping) {
    const order = {
        items: [...cart],
        ...shipping,
        orderDate: new Date().toISOString()
    };
    console.log('Order details:', order);
    return order;
}

// Finalizing the order with the user's cart and shipping details
const userOrder = finalizeOrder(userCart, shippingDetails);

// Output: 
// Order details: {
//     items: ['Laptop', 'Mouse', 'Keyboard'],
//     name: 'John Doe',
//     address: '1234 Elm Street',
//     city: 'Metropolis',
//     postalCode: '12345',
//     orderDate: '2024-09-01T12:00:00.000Z'
// }

Explanation:

  • ...cart spreads the items in the cart array into the items array inside the order object.
  • ...shipping spreads the properties of the shippingDetails object into the order object.
  • The orderDate property is added to capture when the order was finalized.

Combining Both Operators

Let's say you want to add a feature where the user can add multiple items to the cart, and the first item is considered a "featured" item with a discount. The rest operator can handle the additional items, and the spread operator can be used to create a new cart with the updated featured item:

function addItemsWithDiscount(featuredItem, ...otherItems) {
    const discountedItem = { ...featuredItem, price: featuredItem.price * 0.9 }; // 10% discount
    return [discountedItem, ...otherItems];
}

const laptop = { name: 'Laptop', price: 1000 };
const mouse = { name: 'Mouse', price: 50 };
const keyboard = { name: 'Keyboard', price: 70 };

const updatedCart = addItemsWithDiscount(laptop, mouse, keyboard);

console.log(updatedCart);
// Output: 
// [
//     { name: 'Laptop', price: 900 }, 
//     { name: 'Mouse', price: 50 }, 
//     { name: 'Keyboard', price: 70 }
// ]

Explanation:

  • The featuredItem (the laptop) receives a 10% discount by creating a new object using the spread operator, which copies all properties and then modifies the price.
  • ...otherItems collects the additional items (mouse and keyboard) into an array.
  • The final updatedCart array combines the discounted featured item with the other items using the spread operator.

Real-World Summary

  • Rest Operator: Used to manage dynamic input like adding multiple items to a shopping cart. It gathers remaining arguments or properties into an array or object.
  • Spread Operator: Useful for processing and transforming data, such as merging arrays, copying objects, and finalizing orders by combining item details with user information.

These examples demonstrate how the rest and spread operators can simplify code and improve readability in real-world scenarios like managing shopping carts and processing e-commerce orders.

Here's a breakdown of what's happening in your code:

const [first, second, third, ...rest] = [10, 20, 30, 40, 50];

console.log(first);  // Output: 10
console.log(second); // Output: 20
console.log(third);  // Output: 30
console.log(rest);   // Output: [40, 50]

Explanation:

  • Destructuring:

    • first is assigned the first element of the array (10).
    • second is assigned the second element of the array (20).
    • third is assigned the third element of the array (30).
  • Rest Operator:

    • ...rest collects all the remaining elements of the array after the third element into a new array [40, 50].

Output:

  • first: 10
  • second: 20
  • third: 30
  • rest: [40, 50]

This code correctly logs the individual elements first, second, and third, and also captures the remaining elements into the rest array, which contains [40, 50].

Let me know if you have any further questions or if there's anything else you'd like to explore!

위 내용은 EXAMPLE을 사용하는 Javascript의 스프레드 및 나머지 연산자의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.