문제

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

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;

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

이것이 무엇입니다 배열#맵 잘합니다

var arr = oFullResponse.results.map(obj => ({
    key: obj.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 = new Object();
 for (var i = 0; i < oFullResponse.results.length; i++) {
     myColumnDefs[i] = ({key:oFullResponse.results[i].label, sortable:true, resizeable:true});
  }

ES6에서 그런 일을 할 수 있습니다.

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

배열을 만들고 객체 리터럴을 추가합니다.

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};
}
var myColumnDefs = new Array();

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

ES6을 사용하여 @Tetra보다 더 나아가려면 소위를 사용할 수 있습니다. "객체 스프레드 구문"그리고 다음과 같은 일을하십시오.

let john = {
    firstName: "John",
    lastName: "Doe",
};

let people = new Array(10).fill().map((e, i) => {

    return {
        ...john,
        id: i
    }
});
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top