cod*_*boy 216 javascript arrays object-literal
我需要创建一个对象文字数组,如下所示:
var myColumnDefs = [
{key:"label", sortable:true, resizeable:true},
{key:"notes", sortable:true,resizeable:true},......
Run Code Online (Sandbox Code Playgroud)
在这样的循环中:
for (var i = 0; i < oFullResponse.results.length; i++) {
console.log(oFullResponse.results[i].label);
}
Run Code Online (Sandbox Code Playgroud)
值的值key
应该results[i].label
在数组的每个元素中.
RaY*_*ell 380
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
});
}
Run Code Online (Sandbox Code Playgroud)
Tri*_*ych 60
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;
Run Code Online (Sandbox Code Playgroud)
上述方法应该比在整个对象数组中搜索每个访问的密钥快得多并且惯用.
End*_*ess 11
这就是Array#map擅长的
var arr = oFullResponse.results.map(obj => ({
key: obj.label,
sortable: true,
resizeable: true
}))
Run Code Online (Sandbox Code Playgroud)
您可以在ES6中执行类似的操作。
new Array(10).fill().map((e,i) => {
return {idx: i}
});
Run Code Online (Sandbox Code Playgroud)
在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)));
}
Run Code Online (Sandbox Code Playgroud)