테스트 사이트 - 개발 중인 베타 버전입니다

Object 배열 삭제 관련 질문 입니다. 채택완료

세균님 2년 전 조회 1,870

현재 배열에 학생의 성적을 넣고 있습니다.

[

{name : "나라" , score : 30},

{name : "태희" , score : 30},

]

 

이 상태에서 

{name : "나라" , score : 40} 을 위에 배열에 넣어주고 

{name : "나라" , score : 30} 를 배열에서 제거 해주고 싶은데 방법이 있을까요?

 

즉, 질문은 

[

{name : "나라" , score : 30},

{name : "태희" , score : 30},

{name : "나라" , score : 40}

]

현 배열에서 중복값인 나라 학생의 첫번째 데이터를 지울 수 있는지 궁금합니다. 배열의 순서는 바뀔 수 있기 때문에 위치로 지우는 방법 말고 조언부탁드립니다. 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

채택된 답변
+20 포인트

지우는게 아니고 수정을 하는게 맞습니다.

반복문으로 name 나라를 찾고, 나라가 없을때 object 배열을 추가 해 주는것이 바람직합니다.

어차피 name 에 해상하는 배열을 검색해야 하기 때문에, 반복문을 반드시 사용해서,

name 에 해당하는 값을 검색후 있으면 수정, 없으면 추가가 바람직합니다.

중복되는 데이타는 존재할 수 없습니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

세균님
2년 전
답변 감사합니다!!

댓글을 작성하려면 로그인이 필요합니다.

답변에 대한 댓글 1개

세균님
2년 전
답변 감사합니다!!

댓글을 작성하려면 로그인이 필요합니다.

</p>

<p><script>

my = [

{name : "나라" , score : 30},

{name : "태희" , score : 30}

];

my.shift();

my.push({name : "나라" , score : 40});

</script></p>

<p>

 

자바스크립트 배열에서 첫 요소의 삭제는 shift() 이고

배열에 다른 요소를 더할 때는 push() 를 사용합니다. 그래서 my 의 최종값은 아래처럼 됩니다.

 

my = [
{name : "태희" , score : 30},
{name : "나라" , score : 40}
];

 

----------

 

제가 질문을 약간 잘못 독해했네요.

배열 순서와 상관없고 name 의 중복이 없는 배열이라면

배열을 포인문으로 돌리면서 if 로 나라의 score 만 40 으로 바꾸세요.

 

</p>

<p>for (i in my) if (my[i].name === "나라") my[i].score = 40;</p>

<p>또는</p>

<p>for (i in my) if (my[i]["name"] === "나라") my[i]["score"] = 40;</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

세균님
2년 전
답변 감사합니다!! 도전해보겠습니다!!

댓글을 작성하려면 로그인이 필요합니다.

2년 전

</p>

<p><script>

var arr = [

    {name : "나라" , score : 30},

    {name : "나라" , score : 70},

    {name : "빙구" , score : 20},

    {name : "나라" , score : 60},

    {name : "태희" , score : 30},

    {name : "나라" , score : 40},

    {name : "태희" , score : 50}

];</p>

<p>function unique_name_max_score(arr) {

    var last_i = null;</p>

<p>    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);

        }

    }

}</p>

<p>console.log(JSON.stringify(arr));

unique_name_max_score(arr);

console.log(JSON.stringify(arr));

</script></p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

세균님
2년 전
답변 감사합니다!!!! 도전해보겠습니다!!

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인