如何在属于 Javascript 中的对象的键中对多个值进行分组?
How to group multiple values in a key belonging to an object in Javascript?
我正在尝试在 lodash 中复制 groupBy 方法。这是我的代码:
var array = [1.1,1.3,2.3,2.5,3.1,3.5];
function groupBy (collection, func) {
var result = {};
for (var i=0; i<array.length; i++) {
var property = func(array[i])
if ((property in result) === property) {
result[property] = array[i];
} else {
result[property] = array[i];
}
}
return result;
}
console.log(groupBy(array, function(n){return Math.floor(n) }));
我遇到的问题是属于键的值正在使用我的第一个 if 分支替换,但我不确定如何更改此分支以使每个键列出与其关联的多个值。我的输出是 {'1':1.3, '2':2.5, '3':3.5},但应该是 {'1':1.1, 1.3... 等
谢谢!
像这样?
var array = [1.1,1.3,2.3,2.5,3.1,3.5];
function groupBy (collection, func) {
var result = {};
for (var i=0; i<array.length; i++) {
var property = func(array[i])
if (!result[property]) result[property]=[];
result[property].push(array[i]);
}
return result;
}
console.log(groupBy(array, function(n){return Math.floor(n) }));
您不能像那样在单个对象上存储多个值 属性,您需要某种集合数据结构,例如数组。
var array = [1.1,1.3,2.3,2.5,3.1,3.5];
function groupBy (collection, func) {
var i, property, result = {};
for (i = 0; i < collection.length; i++) {
property = func(array[i])
if (!(property in result)) {
result[property] = [];
}
result[property].push(array[i]);
}
return result;
}
console.log(groupBy(array, function(n){return Math.floor(n) }));
这是您的代码的更正版本:
function groupBy (collection, func) {
var result = {};
for (var i=0; i<array.length; i++) {
var property = func(array[i])
//if ((property in result) === property) {
if (!(property in result)) {
result[property] = [array[i]];
} else {
//result[property] = array[i];
result[property].push(array[i]);
}
}
return result;
}
以及使用 Map
的不同实现。
var numbers = [1.1, 1.3, 2.3, 2.5, 3.1 ,3.5];
var result = groupBy(numbers, Math.floor);
console.log(result); //Map {1 => [1.1, 1.3], 2 => [2.3, 2.5], 3 => [3.1, 3.5]}
function groupBy(arr, getKeyFrom) {
return arr.reduce(function (groupedItems, item) {
var key = getKeyFrom(item);
if (groupedItems.has(key)) groupedItems.get(key).push(item);
else groupedItems.set(key, [item]);
return groupedItems;
}, new Map());
}
我正在尝试在 lodash 中复制 groupBy 方法。这是我的代码:
var array = [1.1,1.3,2.3,2.5,3.1,3.5];
function groupBy (collection, func) {
var result = {};
for (var i=0; i<array.length; i++) {
var property = func(array[i])
if ((property in result) === property) {
result[property] = array[i];
} else {
result[property] = array[i];
}
}
return result;
}
console.log(groupBy(array, function(n){return Math.floor(n) }));
我遇到的问题是属于键的值正在使用我的第一个 if 分支替换,但我不确定如何更改此分支以使每个键列出与其关联的多个值。我的输出是 {'1':1.3, '2':2.5, '3':3.5},但应该是 {'1':1.1, 1.3... 等
谢谢!
像这样?
var array = [1.1,1.3,2.3,2.5,3.1,3.5];
function groupBy (collection, func) {
var result = {};
for (var i=0; i<array.length; i++) {
var property = func(array[i])
if (!result[property]) result[property]=[];
result[property].push(array[i]);
}
return result;
}
console.log(groupBy(array, function(n){return Math.floor(n) }));
您不能像那样在单个对象上存储多个值 属性,您需要某种集合数据结构,例如数组。
var array = [1.1,1.3,2.3,2.5,3.1,3.5];
function groupBy (collection, func) {
var i, property, result = {};
for (i = 0; i < collection.length; i++) {
property = func(array[i])
if (!(property in result)) {
result[property] = [];
}
result[property].push(array[i]);
}
return result;
}
console.log(groupBy(array, function(n){return Math.floor(n) }));
这是您的代码的更正版本:
function groupBy (collection, func) {
var result = {};
for (var i=0; i<array.length; i++) {
var property = func(array[i])
//if ((property in result) === property) {
if (!(property in result)) {
result[property] = [array[i]];
} else {
//result[property] = array[i];
result[property].push(array[i]);
}
}
return result;
}
以及使用 Map
的不同实现。
var numbers = [1.1, 1.3, 2.3, 2.5, 3.1 ,3.5];
var result = groupBy(numbers, Math.floor);
console.log(result); //Map {1 => [1.1, 1.3], 2 => [2.3, 2.5], 3 => [3.1, 3.5]}
function groupBy(arr, getKeyFrom) {
return arr.reduce(function (groupedItems, item) {
var key = getKeyFrom(item);
if (groupedItems.has(key)) groupedItems.get(key).push(item);
else groupedItems.set(key, [item]);
return groupedItems;
}, new Map());
}