如何使用for循环创建javascript对象
我正在尝试编写一个for循环来创建一个如何使用for循环创建javascript对象,javascript,loops,object,Javascript,Loops,Object,我正在尝试编写一个for循环来创建一个columns对象,如下所示: columns: [ {data: "productCode", title: "Product Code", width: "7%"}, {data: "brand", title: "Brand", width: "10%"}, ] 到目前为止,我已经尝试: 定义每个列的属性: var ltColumns = { "col1": {data: "productCode", title: "Pro
columns
对象,如下所示:
columns: [
{data: "productCode", title: "Product Code", width: "7%"},
{data: "brand", title: "Brand", width: "10%"},
]
到目前为止,我已经尝试:
定义每个列的属性:
var ltColumns = {
"col1": {data: "productCode", title: "Product Code", width: "7%" },
"col2": {data: "brand", title: "Brand", width: "10%"}
};
使用for
循环填充列属性
columns: [
for (var key in ltColumns) {
{
data: ltColumns[key].data,
title: ltColumns[key].title,
width: ltColumns[key].width}
}
];
但是,我不断收到错误的意外标记。有人能帮我解释一下语法吗
谢谢 您需要在阵列外部执行for
循环:
var columns = [];
for(var key in ltColumns) {
columns.push({
data: ltColumns[key].data,
title: ltColumns[key].title,
width: ltColumns[key].width
});
}
我建议你看看
我上面使用的方法是Array.prototype.push
,它将一个项推送到数组的末尾
注意:这是一个常见的ES5实现。您需要在阵列外部执行for
循环:
var columns = [];
for(var key in ltColumns) {
columns.push({
data: ltColumns[key].data,
title: ltColumns[key].title,
width: ltColumns[key].width
});
}
我建议你看看
我上面使用的方法是Array.prototype.push
,它将一个项推送到数组的末尾
注意:这是一个常见的ES5实现。ES7
这种语法,也称为数组理解,是称为ES7的JavaScript版本中的一个非常新的特性。如果要使用此功能(目前只有firefox支持此功能),可以执行以下操作:
columns: [
for (i of ltColumns)
{
data : i.data,
title: i.title,
width: i.width
}
]
columns: Object.keys(ltColumns).map(function (item) { return
ltColumns[item] })
ES6
一个新版本的JavaScript现在在流行浏览器ES6中得到了很好的支持,它的一些特性可以帮助您执行以下操作:
columns: Object.keys(ltColumns).map(item => ltColumns[item])
ES5
ES5是JavaScript的当前版本:
方法1
你可以做:
columns: [
for (i of ltColumns)
{
data : i.data,
title: i.title,
width: i.width
}
]
columns: Object.keys(ltColumns).map(function (item) { return
ltColumns[item] })
方法2
for in
循环也是一个选项:
for (var i in ltColumns)
columns[i] = ltColumns[i];
ES7
这种语法,也称为数组理解,是称为ES7的JavaScript版本中的一个非常新的特性。如果要使用此功能(目前只有firefox支持此功能),可以执行以下操作:
columns: [
for (i of ltColumns)
{
data : i.data,
title: i.title,
width: i.width
}
]
columns: Object.keys(ltColumns).map(function (item) { return
ltColumns[item] })
ES6
一个新版本的JavaScript现在在流行浏览器ES6中得到了很好的支持,它的一些特性可以帮助您执行以下操作:
columns: Object.keys(ltColumns).map(item => ltColumns[item])
ES5
ES5是JavaScript的当前版本:
方法1
你可以做:
columns: [
for (i of ltColumns)
{
data : i.data,
title: i.title,
width: i.width
}
]
columns: Object.keys(ltColumns).map(function (item) { return
ltColumns[item] })
方法2
for in
循环也是一个选项:
for (var i in ltColumns)
columns[i] = ltColumns[i];
请小心,因为它比使用的常规解决方案在中的运行速度慢
最好为常见操作创建辅助函数:
function values(obj) {
return Object.keys(obj).map(function (e) { return obj[e]; });
}
someObject.columns = values(ltColumns);
但最好使用最快的帮助函数解决方案
function values(obj) {
var result = [];
for (var name in obj)
if (obj.hasOwnProperty(name))
result.push(obj[name]);
return result;
}
请小心,因为它比使用的常规解决方案在中的运行速度慢
最好为常见操作创建辅助函数:
function values(obj) {
return Object.keys(obj).map(function (e) { return obj[e]; });
}
someObject.columns = values(ltColumns);
但最好使用最快的帮助函数解决方案
function values(obj) {
var result = [];
for (var name in obj)
if (obj.hasOwnProperty(name))
result.push(obj[name]);
return result;
}
未过滤的因为in
循环是危险的,我建议不要使用未过滤的因为in
循环是危险的,我建议不要使用它们