[9] 배열 함수

Dana's Log·2022년 6월 6일
0

JavaScript

목록 보기
10/13

자주 사용하는 배열 함수 리스트
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
profile
다나로그

0개의 댓글