Javascript 当一个值相同时分组子阵列
当数组[I][0]处的值为公共值时,我尝试将数组中的数据分组在一起 我可以使用Javascript 当一个值相同时分组子阵列,javascript,arrays,json,Javascript,Arrays,Json,当数组[I][0]处的值为公共值时,我尝试将数组中的数据分组在一起 我可以使用Array.map()来执行此操作吗 我一直在尝试另一种解决方案,即创建一个仅具有唯一值的新数组,并将其与原始数组进行比较,但我无法找出将结果生成HighCharts想要的结果的逻辑 我非常有信心,如果我能弄清楚如何进行这种数组操作,我也能弄清楚自动生成HighCharts的逻辑,这将使我的星期六:) 我有: var array = [ ["name1","date1"], ["name1","date
Array.map()
来执行此操作吗
我一直在尝试另一种解决方案,即创建一个仅具有唯一值的新数组,并将其与原始数组进行比较,但我无法找出将结果生成HighCharts想要的结果的逻辑
我非常有信心,如果我能弄清楚如何进行这种数组操作,我也能弄清楚自动生成HighCharts的逻辑,这将使我的星期六:)
我有:
var array = [
["name1","date1"],
["name1","date2"],
["name2","date1"],
["name2","date1"]
];
想把它变成:
var array = [
[
["name1","date1"],
["name1","date2"]
],
["name2","date1"],
["name2","date2"]
]
];
在一个循环中可能不可能做到这一点。我倾向于在第一个过程中创建一个对象,然后在第二个过程中构建数据结构。比如:
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;
}, []);
我可以通过几个循环将项目删除到命名属性中来完成这项工作
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
嗯,你不能真正使用地图。你必须把结果汇总(减少)
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;
}, []);
}
它可以在一个循环中完成,但我认为它的效率比这里的要低(因为在运行过程中构建数组需要重复搜索输出数组,效率比寻址对象属性要低),这对我来说很有效-谢谢!)我还有另一个相关问题--