자주 사용하는 배열 함수 리스트
forEach : 반환값이 없다, 단순 for문과 같이 작동한다.
map : 반환값을 배열에 담아 반환한다.
filter: 조건에 충족하는(true) 아이템만 배열에 담아 반환한다.
some: 조건에 충족하는 아이템이 하나라도 있으면 true 반환, 아니면 flase.
every: 모든 배열에 아이템이 조건을 충족하면 true 반환, 아니면 false.
find : 조건에 충족하는 아이템 하나만 반환(여러개라면 첫번째것만 반환)
findIndex : 조건에 충족하는 아이템의 인덱스값 반환 (여러개라면 첫번째아이템의 인덱스번호만 반환)
let names = ["dana",
"mimir","foden","denny"]
//names.forEach(함수)
function printName(item){
console.log(item+",")
}
names.forEach(printName) // forEach가 알아서 회전하며 매번 아이템을 하나씩 넘김
// dana, mimir, foden, denny,
// 익명함수로 사용하기(익명함수는 불필요하게 메모리 차지안하고 사용되고 사라짐)
names.forEach(function(item){
console.log(item); // dana mimir foden denny
})
names.forEach(
(item,index)=>{console.log(item,index)}
)
/*
dana 0
mimir 1
foden 2
denny 3
*/
// forEach는 반환값이 없다, map은 배열로 리턴
let data = names.map((item)=>{
return item
})
console.log(data) // (4) ["dana", "mimir", "foden", "denny"]
// 원하는 데이터를 가져올 때 많이 쓰임
let nameList = [
{name:"jimin",age:23},
{name:"jk",age:28},
{name:"rm",age:30}
]
let ageList = nameList.map((data)=>{
return data.age
});
console.log(ageList) // (3) [23, 28, 30]
// filter 는 조건을 넣고 조건에 대해 참인것만 모두 반환됨
let ageFilter = nameList.filter(
(item)=>{
return item.name == "rm"
}
)
console.log(ageFilter) // [{name:"rm",age:30"}]
// d로 시작하는 이름 filter 하기
let nameFilter = names.filter(
(item)=>{
return item.startsWith("d")
}
)
console.log(nameFilter) // (2) ["dana", "denny"]
// d로 시작하는 이름 하나라도 있는가 true false 반환
let nameSome = names.some(
(item)=>{
return item.startsWith("d")
}
)
console.log("some:",nameSome) // some: true
// 데이터 모두가 이름의 길이가 0보다 크나 true false
let nameEvery = names.every(
(item)=>{
return item.length>0
}
)
console.log("every:",nameEvery) // every: true
// 이름이 'd'로 시작하는 데이터 찾기, 첫번째로 찾은 하나만 반환
let nameFind = names.find(
(item)=>{
return item.startsWith("d")
}
)
console.log("find:",nameFind) // find: dana
// 인덱스번호 찾아줘
let nameFindIdx = names.findIndex(
(item)=>{
return item.startsWith("d")
}
)
console.log("findIdx:",nameFindIdx) // findIdx: 0
let names = [
"Steven Paul Jobs",
"Bill Gates",
"Mark Elliot Zuckerberg",
"Elon Musk",
"Jeff Bezos",
"Warren Edward Buffett",
"Larry Page",
"Larry Ellison",
"Tim Cook",
"Lloyd Blankfein",
];
// 1. 모든 이름을 대문자로 바꾸어서 출력하시오.
names.forEach( (item) => console.log(item.toUpperCase() )
);
/*
STEVEN PAUL JOBS
BILL GATES
MARK ELLIOT ZUCKERBERG
ELON MUSK
JEFF BEZOS
WARREN EDWARD BUFFETT
LARRY PAGE
LARRY ELLISON
TIM COOK
LLOYD BLANKFEIN
*/
let upperCaseName = names.map((item)=>item.toUpperCase())
console.log(upperCaseName)
/*
(10) ["STEVEN PAUL JOBS", "BILL GATES", "MARK ELLIOT ZUCKERBERG", "ELON MUSK", "JEFF BEZOS", "WARREN EDWARD BUFFETT", "LARRY PAGE", "LARRY ELLISON", "TIM COOK", "LLOYD BLANKFEIN"]
*/
// 2. 성을제외한 이름만 출력하시오. (예-[“Steven”,“Bill”,“Mark”,“Elon”…])
let firstName = names.map((item)=>{
let arr = item.split(" ");
console.log(arr); /* (3) ["Steven", "Paul", "Jobs"]
(2) ["Bill", "Gates"]
(3) ["Mark", "Elliot", "Zuckerberg"]
(2) ["Elon", "Musk"]
(2) ["Jeff", "Bezos"]
(3) ["Warren", "Edward", "Buffett"]
(2) ["Larry", "Page"]
(2) ["Larry", "Ellison"]
(2) ["Tim", "Cook"]
(2) ["Lloyd", "Blankfein"] */
return arr[0];
});
// let firstName = names.map((item)=>item.split(' ')[0])
console.log(firstName);
/*
(10) ["Steven", "Bill", "Mark", "Elon", "Jeff", "Warren", "Larry", "Larry", "Tim", "Lloyd"]
*/
// 3. 이름의 이니셜만 출력하시오. (예-[“SPU”,“BG”,“MEZ”,“EM”…])
let initialOnly = names.map((item)=>{
let splitName = item.split(" ");
let initial = "";
splitName.forEach((nameItem)=>{
console.log("nameItem:",nameItem); /*
nameItem: Steven
nameItem: Paul
nameItem: Jobs
nameItem: Bill
nameItem: Gates
nameItem: Mark
.... */
initial += nameItem[0]
});
return initial;
});
console.log(initialOnly);
/*
(10) ["SPJ", "BG", "MEZ", "EM", "JB", "WEB", "LP", "LE", "TC", "LB"]
*/
// 4. 이름에 a를 포함한 사람들을 출력하시오
let aIncludeName = names.filter( (item)=> item.includes("a") );
console.log(aIncludeName);
/*
(7) ["Steven Paul Jobs", "Bill Gates", "Mark Elliot Zuckerberg", "Warren Edward Buffett", "Larry Page", "Larry Ellison", "Lloyd Blankfein"]
*/
// 5. 이름에 같은 글자가 연속해서 들어간 사람을 출력하시오
let doubleLetter = names.filter((item) => {
let splitName = item.split("");
return splitName.some((letter, index) => letter == splitName[index + 1]);
})
console.log(doubleLetter);
// 6. 전체 이름의 길이가 20자 이상인 사람이 있는가?
console.log(names.some((item)=>item.length>=20)); // true
// 7. 성을 제외한 이름에 p를 포함한 사람이 있는가? (대소문자 상관 no)
console.log(names.some((item)=>{
let splitName = item.split(' ')
splitName.pop()
console.log(splitName); /*
(2) ["Steven", "Paul"]
Array ["Bill"]
(2) ["Mark", "Elliot"]
Array ["Elon"]
Array ["Jeff"]
(2) ["Warren", "Edward"]
Array ["Larry"]
Array ["Larry"]
Array ["Tim"]
Array ["Lloyd"]
*/
return splitName.some(eachName=>eachName.toLocaleLowerCase().includes("p"))
// toLocaleLowerCase() : 문자열을 소문자로 변환
}));
// 8. 모두의 전체 이름의 길이가 20자 이상인가?
console.log(names.every(item=>item.length>=20)) // false
// 9. 모두의 이름에 a가 포함되어 있는가?
console.log(names.every(item=>item.includes('a'))); // false
// 10. 전체 이름의 길이가 20자 이상인 사람을 찾으시오
console.log(names.find(item=>item.length>=20)) // Mark Elliot Zuckerberg
// 11. 미들네임이 포함되어있는 사람을 찾으시오.(예-Steven Paul Jobs)
console.log(names.find(item=>item.split(' ').length>=3)) // Steven Paul Jobs
// 12. 전체 이름의 길이가 20자 이상인 사람의 인덱스 번호를 찾으시오.
console.log(names.findIndex(item=>item.length>=20)) // 2
// 13. 미들네임이 포함되어있는 사람의 인덱스 번호를 찾으시오.
console.log(names.findIndex(item=>item.split(' ').length>=3)) // 0