我有一个包含数据和值数组的数组。我正在解决基于我所拥有的数据找出唯一数组的问题。
ex:
var x =[[1,2,3,abc],[3,4,5,xyz],[5,6,7,abc]];
I wanted:
var y =[[6,8,10,abc],[3,4,5,xyz]];
所以我有这种感觉循环遍历第一个数组以检查文本的可能匹配并添加相应的值并返回集成数组。
需要一些帮助来理解这些逻辑。
感谢任何帮助。
答案 0 :(得分:1)
请参阅此示例on jsFiddle。
function GroupBy(a, keySelector, elementSelector)
{
elementSelector = elementSelector || function(e) { return e; };
var key;
var hashs = {};
for (var i = 0, n = a.length; i < n; ++i)
{
key = keySelector(a[i]);
hashs[key] = hashs[key] || []
hashs[key].push(a[i]);
}
return hashs;
}
使用这种方法,我可以通过一个关键字对数组进行分组:
var x =[[1,2,3,"abc"],[3,4,5,"xyz"],[5,6,7,"abc"]];
var grouped = GroupBy(x, function(k) { return k[k.length-1]; });
我按大数组中每个数组的最后一个元素进行分组。然后我累积值并删除我已计算的值:
for (var i in grouped)
{
var arr = grouped[i];
for (var j = 1; j < arr.length; )
{
for (var p = 0; p < arr[j].length - 1; ++p)
{
arr[0][p] += arr[j][p];
}
arr.splice(j, 1);
}
}
结果是
console.log(grouped);