JavaScript
javascript 자바스크립트 map, reduce, filter, find, every 응용하기
dev.mk
2020. 10. 10. 18:17
반응형
/*json Array 중복 값 찾기*/
let _jsonArray = [{“name” : “aa”, “id”: “aa” },{“name” : “bb”, “id”: “bb” },{“name” : “cc”, “id”: “aa” },{“name” : “dd”, “id”: “dd” },{“name” : “ee”, “id”: “ee” }];
let _result = _jsonArray.reduce(function(obj,key){
if(!obj[key.id]){
obj[key.id] = 0;
}
obj[key.id] += 1;
if(obj[key.id == 2){
alert(“중복된 데이터가 있습니다.”);
return false;
}
return obj;
}, {});
/*배열내 특정 키 값의 중복값 구하기 */
let dataList = [
{ "proName":"다낭여행", "proCd":"DN1", "reseCnt":"1" },
{ "proName":"다낭여행1", "proCd":"DN2", "reseCnt":"4" },
{ "proName":"다낭여행2", "proCd":"DN3", "reseCnt":"1" },
{ "proName":"다낭여행3", "proCd":"DN4", "reseCnt":"5" },
{ "proName":"다낭여행4", "proCd":"DN5", "reseCnt":"5" },
{ "proName":"다낭여행5", "proCd":"DN6", "reseCnt":"0" },
{ "proName":"다낭여행", "proCd":"DN7", "reseCnt":"1" },
{ "proName":"다낭여행9", "proCd":"DN8","reseCnt":"10" }
]
let totCnt;
//초기값을 0으로 해야 숫자로 인식
totCnt = dataList.reduce((acc,cur,i)=>{
console.log("누적된 값 :"+acc+" ","| 누적할 값 : "+cur.reseCnt+"| 순번 :"+i);
return acc+Number(cur.reseCnt);
},0);
//결과 27
console.log(totCnt);
/*배열값 중복 개수 구하기*/
const votes = ['엄마', '아빠', '아빠', '아빠', '엄마','엄빠', '아마', '아마', '엄빠', '엄마', '아빠', '딸', '아들'];
//reduce((누산값, 현재요소값, 현재요소의index, 현재배열)
const result2 = votes.reduce((acc, el, i) => {
console.log(`${i}번째 콜백함수`)
console.log(`acc:`, acc);
console.log(`el:`, el);
acc[el] = (acc[el] || 0) + 1;
return acc;
}, {});
console.log('---------------')
console.log('result2:', result2);
//결과
{딸: 1, 아들:1, 아마:2, 아빠:4, 엄마:3, 엄빠:2}
/*비교 대상 아이디랑 같은것의 이름을 가져오기*/
let _jsonArray = [{“name” : “aa”, “id”: “aa” },{“name” : “bb”, “id”: “bb” },{“name” : “cc”, “id”: “aa” },{“name” : “dd”, “id”: “dd” },{“name” : “ee”, “id”: “ee” }];
let _id = “dd”;
let id = _jsonArray.find(function(v){
return v.id == _id
}).name;
//결과 “dd”
/* 1배열에서 2배열의 값 빼기 */
let _jsonArray1 = [{“name” : “aa”, “id”: “aa” },{“name” : “bb”, “id”: “bb” },{“name” : “cc”, “id”: “aa” },{“name” : “dd”, “id”: “dd” },{“name” : “ee”, “id”: “ee” }];
let _jsonArray2 = [{“name” : “aa”, “id”: “aa” },{“name” : “dd”, “id”: “dd” },{“name” : “ee”, “id”: “ee” }];
let result = _jsonArray1.filter(function(el1){
return _jsonArray2.every(function(el2){
return el1.name !== el2.name;
});
})
//result = [{“name” : “bb”, “id”: “bb” },{“name” : “cc”, “id”: “aa” }]
/* 기존 배열을 새로운 배열로 만들기 */
let _jsonArray = [
{“name” : “aa”, “id”: “aa”, "class" : "A"}
,{“name” : “bb”, “id”: “bb”, "class" : "B"}
,{“name” : “cc”, “id”: “aa”, "class" : "C"}
,{“name” : “dd”, “id”: “dd”, "class" : "D"}
,{“name” : “ee”, “id”: “ee”, "class" : "E"}
];
_jsonArray = _jsonArray.map(function(v){ return {'new_name' : v.name, 'new_id' : v.id } }
/* jsonObject를 배열로 만들어서 n개로 나눈 2차원 배열 만들기 */
var obj = {
"regNm": "관리자",
"regDt": "20211016",
"fileNm1": "첫번째파일",
"fileSize1": "100",
"filePath1": "C/Workspace",
"fileNm2": "두번째파일",
"fileSiz2": "200",
"filePath2": "C/Workspace",
"fileNm3": "세번째파일",
"fileSize3": "300",
"filePath3": "C/Workspace"
};
delete obj.regNm;
delete obj.regDt;
var result = [];
var resultMap = Object.keys(obj).map(function (key){
var rObj = {};
rObj[key] = obj[key];
return rObj
});
var result2 = [];
for(i=0; i<resultMap.length; i+=3){
result2.push(resultMap.slice(i, i+3));
}
console.log(result2)
/*기존 배열을 새로운 변수에 복사하기*/
let afterArray = JSON.parse(JSON.stringify(boforeArray));
/*해당 키 기준으로 배열의 중복을 제거하고 유일한 배열로 만들기*/
let _jsonArray = [
{“name” : “aa”, “id”: “aa”, "class" : "A"}
,{“name” : “aa”, “id”: “aa”, "class" : "B"}
,{“name” : “cc”, “id”: “cc”, "class" : "C"}
,{“name” : “dd”, “id”: “dd”, "class" : "D"}
,{“name” : “dd”, “id”: “ee”, "class" : "E"}
];
//name이랑 id가 같은것들을 중복 제거하기
_jsonArray = _jsonArray.filter(function v, i, s){
return i === s.findIndex(function(t){
return t.name === v.name && t.id === v.id; // &&로 조건 추가 가능
});
});
// 결과
{“name” : “aa”, “id”: “aa”, "class" : "B"}
,{“name” : “cc”, “id”: “cc”, "class" : "C"}
,{“name” : “dd”, “id”: “ee”, "class" : "E"}
filter , find , map 함수뒤에 .으로 연결해서 사용 가능하다.
반응형