如何创建对象的文字在一个循环数组?
-
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