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 함수뒤에 .으로 연결해서 사용 가능하다.

반응형