[javascript] 루프에서 객체 리터럴 배열을 만드는 방법은 무엇입니까?

다음과 같은 객체 리터럴 배열을 만들어야합니다.

var myColumnDefs = [
    {key:"label", sortable:true, resizeable:true},
    {key:"notes", sortable:true,resizeable:true},......

이런 루프에서 :

for (var i = 0; i < oFullResponse.results.length; i++) {
    console.log(oFullResponse.results[i].label);
}

의 값은 배열의 각 요소 에 key있어야합니다 results[i].label.



답변

var arr = [];
var len = oFullResponse.results.length;
for (var i = 0; i < len; i++) {
    arr.push({
        key: oFullResponse.results[i].label,
        sortable: true,
        resizeable: true
    });
}


답변

RaYell의 답변은 좋습니다-귀하의 질문에 답변합니다.

하위 객체를 값으로 사용하여 레이블로 키가 지정된 객체를 실제로 만들어야한다고 생각합니다.

var columns = {};
for (var i = 0; i < oFullResponse.results.length; i++) {
    var key = oFullResponse.results[i].label;
    columns[key] = {
        sortable: true,
        resizeable: true
    };
}

// Now you can access column info like this. 
columns['notes'].resizeable;

위의 접근 방식은 각 액세스에 대한 키를 전체 객체 배열에서 검색하는 것보다 훨씬 빠르고 관용적이어야합니다.


답변

ES6에서 이와 같은 작업을 수행 할 수 있습니다.

new Array(10).fill().map((e,i) => {
   return {idx: i}
});


답변

이것이 Array # map 이 잘하는 것입니다

var arr = oFullResponse.results.map(obj => ({
    key: obj.label,
    sortable: true,
    resizeable: true
}))


답변

이것은 작동합니다 :

 var myColumnDefs = new Object();
 for (var i = 0; i < oFullResponse.results.length; i++) {
     myColumnDefs[i] = ({key:oFullResponse.results[i].label, sortable:true, resizeable:true});
  }


답변

Nick Riggs와 같은 생각이지만 생성자를 만들고 배열을 사용하여 배열에 새 객체를 푸시합니다. 클래스 키의 반복을 피하십시오.

var arr = [];
var columnDefs = function(key, sortable, resizeable){
    this.key = key; 
    this.sortable = sortable; 
    this.resizeable = resizeable;
    };

for (var i = 0; i < len; i++) {
    arr.push((new columnDefs(oFullResponse.results[i].label,true,true)));
}


답변

배열을 만든 다음 객체 리터럴을 추가합니다.

var myColumnDefs = [];

for ( var i=0 ; i < oFullResponse.results.length; i++) {

    console.log(oFullResponse.results[i].label);
    myColumnDefs[myColumnDefs.length] = {key:oFullResponse.results[i].label, sortable:true, resizeable:true};
}