[[1, 0.3], [1, 0.5], [2, 0.6], [2, 0.7], [3, 0.8], [3, 0.9]]
我想要基于第一个值的新数组,如下所示:
[0.3, 0.5]
[0.6, 0.7]
[0.8, 0.9]
它们是三个数组,因为有三个数字1和2以及3.如果有更多数字,则应该出现更多数组。
非常感谢。
答案 0 :(得分:3)
您可以创建一个新对象,其中键将是索引号(每个当前数组值的第一个索引),值将是相关数字(第二个索引)。
var arr = [[1, 0.3], [1, 0.5], [2, 0.6], [2, 0.7], [3, 0.8], [3, 0.9]];
var newObj = {};
arr.map(function(item){
if(newObj[item[0]])
newObj[item[0]].push(item[1]);
else
newObj[item[0]] = [item[1]];
});
console.log('New object: ' + JSON.stringify(newObj));
// if you insist on creating an array
var newArr = [];
var cnt = 0;
for(var item in newObj)
{
if(newObj.hasOwnProperty(item))
{
newArr[cnt] = newObj[item];
cnt++;
}
}
console.log('New array: ' + JSON.stringify(newArr));
答案 1 :(得分:0)
检查此fiddle
var arr = [[1, 0.3], [1, 0.5], [2, 0.6], [2, 0.7], [3, 0.8], [3, 0.9]];
var outputObj = {};
var outputArr = [];
for ( var counter = 0; counter < arr.length; counter++ )
{
if ( !outputObj[ arr[ counter ][ 0 ] ] )
{
outputObj[ arr[ counter ][ 0 ] ] = [];
}
outputObj[ arr[ counter ][ 0 ] ].push( arr[ counter ][ 1 ] );
}
for( var id in outputObj )
{
outputArr.push( outputObj[ id ] );
}
console.log( outputArr );
答案 2 :(得分:0)
我同意其他的回答者说,一个对象包含一组数组,这些数组的键对应于你要分组的数字,这是要走的路。这是使用reduce
的解决方案。它传入一个空对象作为初始值。
var obj = arr.reduce(function (p, c) {
// for each of the nested arrays we iterate over
// set the key as the "groupBy" number
// (the first element)
var key = c[0];
// if that key doesn't exist in the object (p)
// that we've passed in
// create it and assign a new array to it
p[key] = p[key] || [];
// push the second element of the array to the
// array in the object
p[key].push(c[1]);
// pass the object in to the next iteration
// of the reduce callback
return p;
}, {});
输出
{
"1": [ 0.3, 0.5 ],
"2": [ 0.6, 0.7 ],
"3": [ 0.8, 0.9 ]
}
然后,您可以使用方括号表示法获取数据。
obj['1'][0] // 0.3
答案 3 :(得分:0)
检查this:
var target = [[1, 0.3], [1, 0.5], [2, 0.6], [2, 0.7], [3, 0.8], [3, 0.9]];
var result = [];
for (var count=0; count<target.length; count++){
var arrayCount = [];
for (var elem in target) {
if (target[elem][0] === count) {
arrayCount.push(target[elem][1]);
}
}
if (arrayCount.length !== 0) {
result.push(arrayCount);
}
}
//This is the result, i.e.: [[0.3, 0.5], [0.6, 0.7], [0.8, 0.9]]
console.log(result);
答案 4 :(得分:0)
如果第一个元素总是非负数,那么这样的东西也适合你:
function merge(arr){
var tmp = [];
arr.map(function(item){
var key = item[0], value = item[1];
if(!tmp[key]){
tmp[key] = [value];
}
else{
tmp[key].push(value);
}
});
return tmp.filter(function(item){
return item ? true : false;
});
}
http://jsfiddle.net/ndaidong/f1g882gy/
输入:[[1, 0.3], [1, 0.5], [2, 0.6], [2, 0.7], [3, 0.8], [3, 0.9]];
输出:[ [ 0.3, 0.5 ], [ 0.6, 0.7 ], [ 0.8, 0.9 ] ]
输入:[[1, 0.3], [4, 0.6], [3, 0.8], [4, 0.2], [1, 0.5], [2, 0.7], [2, 0.6], [3, 0.9]];
输出:[ [ 0.3, 0.5 ], [ 0.7, 0.6 ], [ 0.8, 0.9 ], [ 0.6, 0.2 ] ]
答案 5 :(得分:0)
只需使用Array.prototype.reduce()
的值来比较该组。
var data = [[1, 0.3], [1, 0.5], [2, 0.6], [2, 0.7], [3, 0.8], [3, 0.9]],
array = [];
data.reduce(function (r, a) {
if (r === a[0]) {
array[array.length - 1].push(a[1]);
} else {
array.push([a[1]]);
}
return a[0];
}, null);
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');