programing tip

Javascript ES6 / ES5 배열에서 찾기 및 변경

itbloger 2020. 9. 18. 07:53
반응형

Javascript ES6 / ES5 배열에서 찾기 및 변경


개체 배열이 있습니다. 일부 필드에서 찾은 다음 변경하고 싶습니다.

var item = {...}
var items = [{id:2}, {id:2}, {id:2}];

var foundItem = items.find(x => x.id == item.id);
foundItem = item;

원래 개체를 변경하고 싶습니다. 어떻게? (저도 lodash에 있을지 상관 없습니다)


findIndex사용 하여 객체 배열에서 인덱스를 찾고 필요에 따라 바꿀 수 있습니다.

var item = {...}
var items = [{id:2}, {id:2}, {id:2}];

var foundIndex = items.findIndex(x => x.id == item.id);
items[foundIndex] = item;

이것은 고유 한 ID를 가정합니다. ID가 중복 된 경우 (예시와 같이) forEach를 사용하는 것이 더 좋습니다.

items.forEach((element, index) => {
    if(element.id === item.id) {
        items[index] = item;
    }
});

내 최선의 접근 방식은 다음과 같습니다.

var item = {...}
var items = [{id:2}, {id:2}, {id:2}];

items[items.findIndex(el => el.id === item.id)] = item;

findIndex에 대한 참조

그리고 새 객체로 바꾸고 싶지 않고 대신 필드를 복사하려면 item다음을 사용할 수 있습니다 Object.assign.

Object.assign(items[items.findIndex(el => el.id === item.id)], item)

대안으로 .map():

Object.assign(items, items.map(el=> el.id === item.id? item : el))


다른 방법은 스플 라이스 를 사용하는 것 입니다.

splice()메서드는 기존 요소를 제거하거나 교체하거나 새로운 요소 를 제자리에 추가하여 배열의 내용을 변경합니다 .

주의 : 리 액티브 프레임 워크로 작업하는 경우 "뷰"가 업데이트되고 어레이가 업데이트되었음을 ​​"알고"있습니다.

대답 :

var item = {...}
var items = [{id:2}, {id:2}, {id:2}];

let foundIndex = items.findIndex(element => element.id === item.id)
items.splice(foundIndex, 1, item)

항목의 값만 변경하고 싶은 경우에는 찾기 기능을 사용할 있습니다.

// Retrieve item and assign ref to updatedItem
let updatedItem = items.find((element) => { return element.id === item.id })

// Modify object property
updatedItem.aProp = ds.aProp

Filter를 사용할 수 있습니다 .

const list = [{id:0}, {id:1}, {id:2}];
let listCopy = [...list];
let filteredDataSource = listCopy.filter((item) => {
       if (item.id === 1) {
           item.id = 12345;
        }

        return item;
    });
console.log(filteredDataSource);

배열 [Object {id : 0}, Object {id : 12345}, Object {id : 2}]

참고 URL : https://stackoverflow.com/questions/35206125/javascript-es6-es5-find-in-array-and-change

반응형