JavaScript:函数创建数组作为返回对象的值
我正在创建一个函数,它接受数组和回调,并返回一个对象。它被设计为遍历数组并对每个元素执行回调。然后,回调的每个返回值都保存为对象上的键。与每个键关联的值将是一个数组,由传递到回调时产生该返回值的所有元素组成JavaScript:函数创建数组作为返回对象的值,javascript,Javascript,我正在创建一个函数,它接受数组和回调,并返回一个对象。它被设计为遍历数组并对每个元素执行回调。然后,回调的每个返回值都保存为对象上的键。与每个键关联的值将是一个数组,由传递到回调时产生该返回值的所有元素组成 function groupBy(array, callback) { let obj = {}; let newArr = []; //loop through each ele w/ callback //return value saved as key in obj
function groupBy(array, callback) {
let obj = {};
let newArr = [];
//loop through each ele w/ callback
//return value saved as key in obj obj[key] = value
array.forEach(ele => {
let key = callback(ele)
obj[key] = callback(ele);
if (obj[key] === undefined) {
obj[key] = array[ele]
newArr.push(array[ele]);
} else {
newArr.push(obj[key]);
}
});
return obj;
}
函数应该创建数组作为返回对象的值,但它没有。此外,如果传入时回调返回相同的值,则不会将数组项分组在一起
测试用例:
相反,我得到:{1:1,2:2}您的代码有不止一个问题 首先,您使用的是
obj[key]=callback(ele)
a命令,它将key
分配给object[key]
第二,您正在推入newArr
数组,但从未使用它
下面的代码片段可能会对您有所帮助
函数groupBy(数组、回调){
设obj={};
//循环通过每个元素,包括回调
//返回值保存为obj obj中的键[key]=值
array.forEach(ele=>{
let key=回调(ele)
obj[key]=obj[key]| |[];
//^^^^^如果空数组不存在,请创建一个空数组
obj[键]。推送(ele)
});
返回obj;
}
常量小数=[1.3,2.1,2.4];
const floored=函数(num){
返回Math.floor(num);
};
console.log(groupBy(小数,floored));//应该记录:*{1:[1.3],2:[2.1,2.4]}**
您不应该重写密钥,而是应该获取数组并将其推送到数组中
函数groupBy(数组、回调){
设obj={};
设newArr=[];
//循环通过每个元素,包括回调
//返回值保存为obj obj中的键[key]=值
array.forEach(ele=>{
let key=回调(ele)
//obj[键]=键;
设newArr=obj[key];
if(newArr==未定义){
newArr=新数组();
}
新推力(ele);
obj[key]=newArr;
});
返回obj;
}
常量小数=[1.3,2.1,2.4];
const floored=函数(num){return Math.floor(num);};
日志(groupBy(小数,floored))
这类问题已经在javascript语言中创建,它是array.reduce()方法谢谢这非常有用。为什么我不应该使用obj[key]=callback(ele)赋值将key分配给object[key]?不客气。很高兴听到它对您有用:)callback(ele)
返回存储实际值的键。例如,对于值1.21
,它返回1
。因此,您可以像object[1]=1那样分配它,但您需要object[1]。push(1.21)
const decimals = [1.3, 2.1, 2.4];
const floored = function(num) { return Math.floor(num); };
console.log(groupBy(decimals, floored)); // should log: **{ 1: [1.3], 2: [2.1, 2.4] }**
function groupBy(array, callback) {
let obj = {};
//loop through each ele w/ callback
//return value saved as key in obj obj[key] = value
array.forEach(ele => {
let key = callback(ele)
if (obj[key] === undefined) {
obj[key] = [ele]
} else {
obj[key].push(ele);
}
});
return obj;
}