배열에서 모든 중복된 값의 index 를 object literal 형식("중복값 : 인덱스 array")으로 리턴해주는 기능을 구현해봤습니다. 가령, var fruites = ["Apple","Banana","Kiwy","Banana","Mango","Kiwy","Banana"]; getDupInArray(fruites); 이런 식으로 하면 { Banana : [1, 3, 6], Kiwy: [2, 5] } 와 같이 구해주죠. 구현 중 reduce 나 object 필터링하는 부분 등을 봐두시면 도움이 될 듯 싶네요.
function uniqArrayValues(inArr) {
return inArr.reduce(function(prev, curr){
if (prev.indexOf(curr) < 0) prev.push(curr);
return prev;
},[]);
}
function filter(obj, func){
var ret = {};
for(var p in obj) {
if(obj.hasOwnProperty(p) && func(obj[p])) {
ret[p] = obj[p];
}
}
return ret;
}
function getDupInArray(inArr) {
var uniq = uniqArrayValues(inArr);
var myObj = {};
for (var i = 0, l = uniq.length; i < l; i++) {
myObj[uniq[i]] = [];
}
inArr.forEach(function(x, i) { myObj[x].push(i); });
var newObj = filter(myObj, function(val) {
return val.length > 1;
});
return (Object.keys(newObj).length === 0)?-1:newObj;
}
'Slack 채널 정리' 카테고리의 다른 글
batch 스크립트에서 파일 탭으로 열기 (0) | 2019.11.27 |
---|---|
js - 배열에 들어있는 Object Literal의 값으로 연산하는 함수 (0) | 2019.11.27 |
js - camel <-> snake (0) | 2019.11.27 |
CNCF (Cloud Native Computing Foundation) (0) | 2019.11.27 |
mariaDB - null 아닌 최종값을 한 줄로 표시 (0) | 2019.11.27 |