【发布时间】:2018-08-18 19:58:16
【问题描述】:
这类似于我的实际问题,但我觉得说明了我需要解决的问题,而不会使事情复杂化。
我需要通过遍历一个二维数组来创建一个对象数组。 二维数组看起来像下面的“sampleArray”。
let sampleArray = [
["open",2],
["high",3],
["low",5],
["close", 10],
["volume", 20],
["open",20],
["high",30],
["low",50],
["close", 100],
["volume", 21],
["open",21],
["high",33],
["low",51],
["close", 1],
["volume", 2],
["open",7],
["high",8],
["low",5],
["close", 11],
["volume", 22]
];
我目前正在格式化一组特别难看的 API 数据,并将数据扁平化为二维数组。我现在需要将这些值放入一个由 5 个对象组成的数组中,其中每个对象的数据属性都由具有该特定标签的所有值填充。
newObject = [
{
data: [2,20,21, ...]
label: "open"
},
{
data: [3,50, ...]
label: "high"
},
{
data: [etc...]
label: "low"
},
{
data: [etc...]
label: "close"
},
{
data: [etc...]
label: "volume"
}
]
我花了大约 3 个小时来尝试完成这项工作,但我觉得我做错了,我不断收到一个错误,即 newArray[i]["label"] 未定义,我明白为什么会这样(尚不存在具有该属性的对象, 我只是不确定如何在 javascript 中表达这个想法(如果具有该标签的对象尚不存在,请创建它并将匹配的值添加到它的 value 属性中)。
function makeArray(array) {
let newArray = [];
for(let i = 0; i <= array.length; i++){
if(newArray[i]["label"] !== array[i][0]){
newArray.push({
"label": array[i][0],
"value": array[i][1]
})
}
else{
newArray.push({
"value": array[i][1]
})
}
}
return newArray;
}
let test = makeArray(sampleArray);
console.log(test);
很抱歉,这篇文章很长,我整天都在压扁这个噩梦般的 API,感觉现在我只是在原地运行。我更喜欢正确方向的观点,而不是直接的答案。我要去打麻袋,看看是否有人可以在早上为我提供一点观点。谢谢!
【问题讨论】:
-
所以你基本上想按标签对新对象进行排序?我会使用 reduce
标签: javascript arrays object populate