Object 배열 삭제 관련 질문 입니다.
본문
현재 배열에 학생의 성적을 넣고 있습니다.
[
{name : "나라" , score : 30},
{name : "태희" , score : 30},
]
이 상태에서
{name : "나라" , score : 40} 을 위에 배열에 넣어주고
{name : "나라" , score : 30} 를 배열에서 제거 해주고 싶은데 방법이 있을까요?
즉, 질문은
[
{name : "나라" , score : 30},
{name : "태희" , score : 30},
{name : "나라" , score : 40}
]
현 배열에서 중복값인 나라 학생의 첫번째 데이터를 지울 수 있는지 궁금합니다. 배열의 순서는 바뀔 수 있기 때문에 위치로 지우는 방법 말고 조언부탁드립니다.
답변 4
지우는게 아니고 수정을 하는게 맞습니다.
반복문으로 name 나라를 찾고, 나라가 없을때 object 배열을 추가 해 주는것이 바람직합니다.
어차피 name 에 해상하는 배열을 검색해야 하기 때문에, 반복문을 반드시 사용해서,
name 에 해당하는 값을 검색후 있으면 수정, 없으면 추가가 바람직합니다.
중복되는 데이타는 존재할 수 없습니다.
<script>
var arr = [
{name : "나라" , score : 30},
{name : "나라" , score : 70},
{name : "빙구" , score : 20},
{name : "나라" , score : 60},
{name : "태희" , score : 30},
{name : "나라" , score : 40},
{name : "태희" , score : 50}
];
function unique_name_max_score(arr) {
var last_i = null;
for (let i = arr.length - 1; i >= 0; i--) {
last_i = arr.findLastIndex((el) => el.name == arr[i].name);
if (last_i > i) {
arr[i].score = Math.max(arr[i].score, arr[last_i].score);
arr.splice(last_i, 1);
}
}
}
console.log(JSON.stringify(arr));
unique_name_max_score(arr);
console.log(JSON.stringify(arr));
</script>
<script>
my = [
{name : "나라" , score : 30},
{name : "태희" , score : 30}
];
my.shift();
my.push({name : "나라" , score : 40});
</script>
자바스크립트 배열에서 첫 요소의 삭제는 shift() 이고
배열에 다른 요소를 더할 때는 push() 를 사용합니다. 그래서 my 의 최종값은 아래처럼 됩니다.
my = [
{name : "태희" , score : 30},
{name : "나라" , score : 40}
];
----------
제가 질문을 약간 잘못 독해했네요.
배열 순서와 상관없고 name 의 중복이 없는 배열이라면
배열을 포인문으로 돌리면서 if 로 나라의 score 만 40 으로 바꾸세요.
for (i in my) if (my[i].name === "나라") my[i].score = 40;
또는
for (i in my) if (my[i]["name"] === "나라") my[i]["score"] = 40;