当数组[i] [0]的值很常见时,我试图将数组中的数据组合在一起。
我可以使用Array.map()
来执行此操作吗?
我一直在玩另一个解决方案,即创建一个只包含唯一值的新数组并将其与原始数组进行比较,但我无法找出制作结果的逻辑进入HighCharts想要的东西。
我非常有信心,如果我能弄清楚如何进行这种数组操作,我还可以找出自动化HighCharts的逻辑,这将使我的星期六:)
我有:
var array = [
["name1","date1"],
["name1","date2"],
["name2","date1"],
["name2","date1"]
];
想把它变成:
var array = [
[
["name1","date1"],
["name1","date2"]
],
["name2","date1"],
["name2","date2"]
]
];
答案 0 :(得分:2)
可能无法在单个循环中执行此操作。我倾向于在第一遍中创建一个对象,然后在一秒钟内构建数据结构。类似的东西:
var obj = oldArray.reduce(function(memo, item) {
// Get the unique value you're interested in, e.g. "name1"
var key = item[0];
// If you've already got it, push this value on the end
if (memo[key]) {
memo[key].push(item);
} else {
// otherwise, create a new array with this single value
memo[key] = [ item ];
}
// Don't forget to return memo, or you'll have one of those
// "bang your head against the wall" moments
return memo;
}, {});
// create a new array and push all the values on
var newArray = [];
for (var k in obj) {
newArray.push(obj[k]);
}
// or an alternative way to do the same thing
var newArray = Object.keys(obj).reduce(function(memo, k) {
memo.push(obj[k]);
return memo;
}, []);
答案 1 :(得分:0)
我可以通过将项目移到命名属性中来完成几个循环。
function returnOrderBy0Position(start)
{
start.tmp={};
while (start.length>0)
{
var o = start.shift();
start.tmp[o[0]] = start.tmp[o[0]] ? start.tmp[o[0]] : [];
start.tmp[o[0]].push(o);
}
for (var p in start.tmp)
start.push(start.tmp[p])
start.tmp=null;
}
returnOrderBy0Position(array); // call this on your array
答案 2 :(得分:0)
嗯,你不能真正使用地图。你必须聚合(减少)结果。
function regroup(arr) {
var groups = {};
return arr.reduce(function (result, item) {
var key = item[0];
var group = groups[key];
if (!group)
result.push(group = groups[key] = []);
group.push(item);
return result;
}, []);
}