【发布时间】:2018-04-04 15:22:27
【问题描述】:
在构造函数中,我试图创建一个对象。
在对象中,我已经对某些数组使用了 map 函数。
当我试图遍历一个对象时出现了挑战,因为我不能在对象上使用 map 函数。我也尝试在这个对象中使用for in 函数,但它出现了,在对象创建中使用for in 是无效的JS。
我的目标是遍历 individualData 对象(就像数组的法线贴图函数一样)。
我尝试在地图功能中移动data: data.individualData。这对我的预期结果不起作用。
这是我的代码:
labelsArray = ['Breakfast', 'Lunch', 'Dinner'];
data = {
miniLabelsArray: ['Egg', 'Soup', 'Steak'],
type: ['Vegetarian', 'Vegan', 'Normal'],
individualData: [{
John: ['1', '2', '3'],
Paul: ['10', '20', '30'],
Kate: ['100', '200', '300']
}]
};
function CreateData(data, someNewObj) {
this.someNewObj = {
labels: labelsArray,
datasets:
data.miniLabelsArray.map((miniLabelsArray, i) => ({
miniLabel: data.miniLabelsArray[i],
type: data.type[i],
})),
data: data.individualData
};
};
var testing = new CreateData(data);
console.log('testing', testing.someNewObj);
https://codepen.io/anon/pen/qoMdoe?editors=1111
预期结果:
...
"datasets": [
{
"miniLabel": "Egg",
"type": "Vegetarian",
"data": ["1", "2", "3"] // DIFFERENCE HERE
},
{
"miniLabel": "Soup",
"type": "Vegan",
"data": ["10", "20", "30"] // DIFFERENCE HERE
},
{
"miniLabel": "Steak",
"type": "Normal",
"data" :["100", "200", "300"] // DIFFERENCE HERE
}
...
谢谢
【问题讨论】:
-
你有没有为你的循环尝试过 for...of? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
@Doug 我在对象本身(内部)中尝试过,但它不是有效的 JS?
-
一个简单的方法是在你的
.map()函数中移动data: ...,然后说data: individualData[0][Object.keys(individualData[0])[i]]。超级尴尬,而且在object.keys()中不能总是保证属性顺序,但它会起作用。 -
@mhodges 如果无法保证订单,有没有其他方法可以保证订单?我猜想在对象之外作为 for in 函数来做可能是一种选择?
-
@lovemyjob 这取决于您的用例。如果知道
[1, 2, 3]专门是“John”的数据,那么您可以有一个单独的名称数组,如下所示:data.names = ["John", "Paul", "Kate"]并且您的个人数据将是[["1", "2", "3"], ["10", "20", "30"], ...]然后您可以访问data.individualData[i]并且您有保证订单。如果您需要与之关联的名称,可以添加name: data.names[i]。
标签: javascript arrays loops object constructor