Program Tip

배열의 모든 객체에 대한 속성 제거

programtip 2020. 12. 6. 21:59
반응형

배열의 모든 객체에 대한 속성 제거


bad배열의 모든 개체에서 속성 을 제거하고 싶습니다 . for루프를 사용하고 모든 객체에서 삭제 하는 것보다 더 좋은 방법이 있습니까?

var array = [{"bad": "something", "good":"something"},{"bad":"something", "good":"something"},...];

for (var i = 0, len = array.length; i < len; i++) {
  delete array[i].bad;
}

을 사용하는 방법이 있어야 할 것 같습니다 prototype. 모르겠어요. 아이디어?


유일한 다른 방법은 외형이며 실제로는 루프입니다.

예 :

array.forEach(function(v){ delete v.bad });

IE8과 호환되도록하려면 forEach에 대한 shim이 필요 합니다 . 프로토 타입을 언급했듯이 prototype.js에도 shim이 있습니다.


ES6를 사용하면 각 개체를 분해하여 명명 된 속성없이 새 개체를 만들 수 있습니다.

const newArray = array.map(({dropAttr1, dropAttr2, ...keepAttrs}) => keepAttrs)

맵을 사용하여 속성을 삭제 한 다음 새 배열 항목을 반환하는 것을 선호합니다.

array.map(function(item) { 
    delete item.bad; 
    return item; 
});

프로토 타입을 사용하는 솔루션은 객체가 비슷할 때만 가능합니다.

function Cons(g) { this.good = g; }
Cons.prototype.bad = "something common";
var array = [new Cons("something 1"), new Cons("something 2"), …];

그러나 그것은 간단합니다 (그리고 O(1)) :

delete Cons.prototype.bad;

underscore.js 를 사용하는 경우 :

var strippedRows = _.map(rows, function (row) {
    return _.omit(row, ['bad', 'anotherbad']);
});

객체가 복사되고 객체의 원래 배열에 영향을 미치지 않도록 루프 Object.assign에서 사용 하는 것이 좋습니다.forEach()

var res = [];
array.forEach(function(item) { 
    var tempItem = Object.assign({}, item);
    delete tempItem.bad; 
    res.push(tempItem);
});
console.log(res);

제 생각에는 이것은 가장 간단한 변형입니다

array.map(({good}) => ({good}))

var array = [{"bad": "something", "good":"something"},{"bad":"something", "good":"something"}];
var results = array.map(function(item){
  return {good : item["good"]}
});
console.log(JSON.stringify(results));

참고 URL : https://stackoverflow.com/questions/18133635/remove-property-for-all-objects-in-array

반응형