사용 사례에 따른 배열 조작
39662 단어 arraysjavascriptcheatsheet
☕️ Read this article on my blog
소개
JavaScript에서 배열을 만들고 조작하는 방법이 너무 많아서 처음에는 혼란스러울 수 있습니다. 그리고 몇 년 동안 연습한 후에도 여전히 어떤 방법을 언제 사용해야 하는지 기억하기 어려울 수 있습니다. 이 게시물은 사용 사례별로 가장 일반적인 배열 방법을 간결한 예와 함께 "치트 시트"와 같은 것을 제공하는 것을 목표로 합니다. 나는 당신이 독립적으로 연습하는 한 예제에서 배우는 것이 가장 좋은 학습 방법 중 하나라고 진정으로 믿습니다. 이 게시물을 즐겨찾기에 추가하고 필요할 때 언제든지 다시 오세요 😉
1. 채우기
이 배열을 만들고 채우는 6가지 방법:
[ 'fruit', 'fruit', 'fruit', 'fruit', 'fruit' ]
// 1. The obvious way 😇
const fruits = ['fruit', 'fruit', 'fruit', 'fruit', 'fruit']
// 2. The old fashion way 🥃
const fruits = new Array(5)
for (let i=0; i<test.length; i++) {
fruits[i] = 'fruit'
}
// 3. Using Array.prototype.fill()
const fruits = new Array(5).fill('fruit')
// 4. Using Array.from()
const fruits = Array.from({length: 5}, () => 'fruit')
// 5. Using spreading
const fruits = [...new Array(5)].map(() => 'fruit')
// 6. Using concat
const fruits = ['fruit', 'fruit', 'fruit'].concat(['fruit', 'fruit'])
2. 변신
다음과 같은 객체 배열을 고려해 보겠습니다.
const fruits = [
{ name: "apple", quantity: 3 },
{ name: "orange", quantity: 5 },
{ name: "pear", quantity: 1 },
{ name: "banana", quantity: 0 },
]
필요에 따라 다양한 방법으로 원래 배열을 변경하지 않고 새 배열을 만들 수 있습니다.
// 1. Transform with Array.prototype.map()
fruits.map(fruit => fruit.name)
// > [ 'apple', 'orange', 'pear', 'banana' ]
fruits.map((fruit, idx) => {
// Map is particularly usefull to build strings for each element of an array
let str = `#${idx + 1} ${fruit.name} (${fruit.quantity})`
return str
})
// > ['#1 apple (3)', '#2 orange (5)', '#3 pear (1)', '#4 banana (3)']
// 2. Filter the array
fruits.filter(fruit => fruit.quantity === 0)
// > ['banana']
// 4. "Reduce" the array to a single value
fruits.reduce((total, fruit) => total + fruit.quantity, 0)
// > 9
// 5. Get a "slice" out of the array (without changing it)
fruits.slice(0, 2)
// > [ { name: 'apple', quantity: 3 }, { name: 'orange', quantity: 5 } ]
// The original array is still untouched
console.log(fruits)
// > [
// { name: "apple", quantity: 3 },
// { name: "orange", quantity: 5 },
// { name: "pear", quantity: 1 },
// { name: "banana", quantity: 0 },
// ]
또는 원래 배열을 직접 수정할 수 있습니다.
// 1. Remove the last item (and return it)
fruits.pop()
// > { name: 'banana', quantity: 3 }
console.log(fruits)
// > [
// { name: 'apple', quantity: 3 },
// { name: 'orange', quantity: 5 },
// { name: 'pear', quantity: 1 }
// ]
// 2. Add one or more item(s) at the end (return the new length)
fruits.push({name: 'kiwi', quantity: 2}, {name: 'strawberry', quantity: 14})
// > 5
console.log(fruits)
// > [
// { name: 'apple', quantity: 3 },
// { name: 'orange', quantity: 5 },
// { name: 'pear', quantity: 1 },
// { name: 'kiwi', quantity: 2 },
// { name: 'strawberry', quantity: 14 }
// ]
// 3. Remove the first item (and return it)
fruits.shift()
// > { name: 'apple', quantity: 3 },
console.log(fruits)
// > [
// { name: 'orange', quantity: 5 },
// { name: 'pear', quantity: 1 },
// { name: 'kiwi', quantity: 2 },
// { name: 'strawberry', quantity: 14 }
// ]
// 4. Add an item at the begining (return the new length)
fruits.unshift({ name: 'cherry', quantity: 7 })
// > 5
console.log(fruits)
// > [
// { name: 'cherry', quantity: 7 },
// { name: 'orange', quantity: 5 },
// { name: 'pear', quantity: 1 },
// { name: 'kiwi', quantity: 2 },
// { name: 'strawberry', quantity: 14 }
// ]
Array.splice
메서드는 요소를 제거하고 추가하여 배열을 변경하는 데 사용할 수도 있습니다. 제거된 요소(또는 요소가 제거되지 않은 경우 빈 배열)를 반환합니다.// Array.prototype.splice(index[, deleteCount, element1, ..., elementN])
// 1. Remove elements
let colors = ['green', 'yellow', 'blue', 'purple'];
colors.splice(0, 2)
// > [ 'green', 'yellow' ]
console.log(colors)
// > [ 'blue', 'purple' ]
// ... without "deleteCount", all elements starting from "index" are removed
let colors = ['green', 'yellow', 'blue', 'purple'];
colors.splice(1)
// > [ 'yellow', 'blue', 'purple' ]
console.log(colors)
// > [ 'green' ]
// 2. Replace elements
let colors = ['green', 'yellow', 'blue', 'purple'];
colors.splice(2, 2, 'pink', 'orange')
// > [ 'blue', 'purple' ]
console.log(colors)
// > [ 'green', 'yellow', 'pink', 'orange' ]
// 3. Insert elements
let colors = ['green', 'yellow', 'blue', 'purple'];
colors.splice(2, 0, 'red', 'white')
// > []
console.log(colors)
// > [ 'green', 'yellow', 'red', 'white', 'blue', 'purple' ]
3. 주장하기
// Let's get back to our fruits 🍊🍒🍌
const fruits = [
{ name: "apple", quantity: 3 },
{ name: "orange", quantity: 5 },
{ name: "pear", quantity: 1 },
{ name: "banana", quantity: 0 },
]
// 1. Array.prototype.some() => check if a least one fruit is out of stock
fruits.some(fruit => fruit.quantity === 0)
// > true
// 2. Array.prototype.every() => are every fruits out of stock ?
fruits.every(fruit => fruit.quantity === 0)
// > false
// 3. Array.prototype.includes()
const shoppingList = ['bread', 'milk', 'cofee', 'sugar']
shoppingList.includes('bread')
// > true
shoppingList.includes('orange')
// > false
4. 주문
// Array.sort change the original array, as well a returning
// its new value (the sorted array)
const numbers = [4, 1, 8, 3, 5]
numbers.sort((a, b) => b - a)
// > [ 8, 5, 4, 3, 1 ]
numbers.sort((a, b) => a - b)
// > [ 1, 3, 4, 5, 8 ]
// If you don't want to mutate the original array, you can spread it before:
const numbers = [4, 1, 8, 3, 5]
const sortedNumbers = [...numbers].sort((a, b) => a - b)
// sortedNumbers = [ 1, 3, 4, 5, 8 ]
// numbers = [4, 1, 8, 3, 5]
5. 검색
const fruits = ['apple', 'orange', 'banana', 'apple', 'kiwi']
// Array.prototype.indexOf()
fruits.indexOf('apple')
// > 0
fruits.indexOf('kiwi')
// > 4
fruits.indexOf('pear')
// > -1
// Array.prototype.lastIndexOf()
fruits.lastIndexOf('apple')
// > 3
// Array.prototype.find()
const numbers = [1, 32, 12, 8, 4, 17]
numbers.find(number => number > 10)
// > [32, 12, 17
6. 배열과 문자열
// 1. Array.join
const words = ['Hello', 'wonderful', 'world']
words.join(' ')
// > 'Hello wonderful world'
// 2. Array.split
const sentence = "Hello wonderful world"
sentence.split(' ')
// > [ 'Hello', 'wonderful', 'world' ]
🎁 보너스: 팁 및 요령
체이닝
위에서 언급한 많은 메서드는 배열을 반환하므로 다음과 같이 연결할 수 있습니다.
const fruits = [
{ name: "apple", quantity: 3 },
{ name: "orange", quantity: 5 },
{ name: "pear", quantity: 1 },
{ name: "banana", quantity: 0 },
]
fruits
.sort((fruit1, fruit2) => fruit2.quantity - fruit1.quantity)
.filter(fruit => fruit.quantity > 0)
.map(fruit => `${fruit.name} (${fruit.quantity})`)
.join(', ')
// > 'orange (5), apple (3), pear (1)'
퍼짐
배열을 분산하는 것이 정말 유용한 다양한 사용 사례가 있습니다.
// 1. Make a copy of an array
const arrayCopy = [...originalArray]
// 2. Add elements in the array
const arrayWithNewElements = [newItem, ...originArray, anotherItem]
// 3. Merge arrays
const mergedArrays = [...array1, ...array2, ...array3]
// 4. Convert a Set into an Array
const arrayFromSet = [...new Set(elements)]
// 5. Populate an empty array
const populatedArray = [...new Array(10)].map((_, idx) => idx)
// > [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
// 6. Convert an array to an object
const fruits = ['apple', 'orange', 'banana', 'kiwi']
console.log({...fruits})
// > { '0': 'apple', '1': 'orange', '2': 'banana', '3': 'kiwi' }
중복 제거
배열에서 중복을 제거하는 3가지 방법:
const array = ['🐑',1,2,'🐑','🐑',3,4];
// OPTION 1
// Convert to a set and back to an array with the spread operator
const distinct_array = [...new Set(array)];
// OPTION 2
// Use filter
const distinct_array = array.filter((item, idx) => array.indexOf(item) === idx);
// OPTION 3
// Use reduce
const distinct_array = array.reduce((unique, item) =>
unique.includes(item) ? unique : [...unique, item]
)
배열 비우기
const fruits = ['apple', 'orange', 'banana', 'kiwi']
fruits.length = 0
console.log(fruits)
// > []
거짓 값 제거
const values = [false, 12, 'test', null, true]
values.filter(Boolean)
// > [ 12, 'test', true ]
오늘의 아침식사는 여기까지입니다. 이 게시물이 마음에 들면 친구/동료와 공유하고 댓글에 의견을 남겨주세요!
환상적인 하루 되세요,
🧡, 요한과 함께
Reference
이 문제에 관하여(사용 사례에 따른 배열 조작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alarid/manipulating-arrays-by-use-case-32d9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)