ループ内でオブジェクトリテラルの配列を作成するには?
-
18-09-2019 - |
質問
私はこのようなオブジェクトリテラルの配列を作成する必要があります:
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
}))
ニック・リッグスのと同じ考え方で、私はそれを使用することにより、アレイ内のコンストラクタ、およびプッシュ新しいオブジェクトを作成します。
:これは、クラスのキーの重複を避けます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
}
});
所属していません StackOverflow