我正在构建我的第一个react原生应用程序,我想向用户展示一些按类别划分的“追随者”屏幕,但要做到这一点,我想我必须从我拥有的东西中创建新的对象数组。
我有这样的对象数组:
followers: [
{
userId: 2,
userName: "Abigail",
followDate: "1980-04-09T10:15:30+07:00",
category: "A"
},
{
userId: 3,
userName: "John",
followDate: "1980-04-09T10:15:30+07:00",
category: "B"
},
{
userId: 4,
userName: "Bob",
followDate: "1980-04-09T10:15:30+07:00",
category: "A"
},
{
userId: 5,
userName: "Martha",
followDate: "1980-04-09T10:15:30+07:00",
category: "B"
}
]
现在我想把这些追随者呈现给用户,这些追随者由追随者数组对象中的类别分开。因此,我认为我需要创建新的对象数组,我认为它应该如下所示:
followersSortedByCategory = [
{
category: "A",
followers: [
{
userId: 2,
userName: "Abigail",
followDate: "1980-04-09T10:15:30+07:00",
category: "A"
},
{
userId: 4,
userName: "Bob",
followDate: "1980-04-09T10:15:30+07:00",
category: "A"
}
]
},
{
category: "B",
followers: [
{
userId: 3,
userName: "John",
followDate: "1980-04-09T10:15:30+07:00",
category: "B"
},
{
userId: 5,
userName: "Martha",
followDate: "1980-04-09T10:15:30+07:00",
category: "B"
}
]
}
]
没有很多“如果”,我不确定如何做到这一点。我认为有一个很好的方法,使用地图,过滤器等功能,但我不知道如何做。
所有这些答案可能会使用减少,它们可能都一样好。但是他们都使用了微妙不同的数据迭代方法。这种方法使用对象键
let categories = Object.values(
// the final output will be an array
data.followers.reduce( (b,a) => {
// we iterate the followers and build the accumulator object
if (b.hasOwnProperty(a.category)) b[a.category].followers.push(a)
// if our accumulating object already has the category key, add to the follower array
else b[a.category] = {category: a.category, followers: [a]}
// otherwise create the object key and initialize it with the first follower
return b
},{}))
let data = {
followers :[
{ userId: 2, userName: "Abigail", followDate: "1980-04-09T10:15:30+07:00", category: "A" },
{ userId: 3, userName: "John", followDate: "1980-04-09T10:15:30+07:00", category: "B" },
{ userId: 4, userName: "Bob", followDate: "1980-04-09T10:15:30+07:00", category: "A" },
{ userId: 5, userName: "Martha", followDate: "1980-04-09T10:15:30+07:00", category: "B" }
]}
let categories = Object.values(data.followers.reduce( (b,a) => {
if (b.hasOwnProperty(a.category)) b[a.category].followers.push(a)
else b[a.category] = {category: a.category, followers: [a]}
return b
},{}))
console.log(categories)
const followers = [
{ userId: 2, userName: "Abigail", followDate: "1980-04-09T10:15:30+07:00", category: "A" },
{ userId: 3, userName: "John", followDate: "1980-04-09T10:15:30+07:00", category: "B" },
{ userId: 4, userName: "Bob", followDate: "1980-04-09T10:15:30+07:00", category: "A" },
{ userId: 5, userName: "Martha", followDate: "1980-04-09T10:15:30+07:00", category: "B" }
];
const followersSortedByCategory = [...
// iterate over followers array while updating categoryMap (category-records)
followers.reduce((categoryMap, follower) => {
const { category } = follower;
// get record of follower's category if exists
const categoryRecord = categoryMap.get(category);
if(!categoryRecord) { // if not, add new pair
categoryMap.set(category, { category, followers: [follower] });
} else { // else update the record's followers array
categoryRecord.followers.push(follower);
}
return categoryMap;
}, new Map)
// return grouped list by categories
.values()
];
console.log(followersSortedByCategory);
较短的解决方案:
const followers = [
{
userId: 2,
userName: "Abigail",
followDate: "1980-04-09T10:15:30+07:00",
category: "A"
},
{
userId: 3,
userName: "John",
followDate: "1980-04-09T10:15:30+07:00",
category: "B"
},
{
userId: 4,
userName: "Bob",
followDate: "1980-04-09T10:15:30+07:00",
category: "A"
},
{
userId: 5,
userName: "Martha",
followDate: "1980-04-09T10:15:30+07:00",
category: "B"
}
]
function formatFollowers(followers){
const categories = [...new Set(followers.map(follower=> follower.category))]
return categories.reduce((acc, category)=> {
const _followers = followers.filter(follower=> follower.category === category)
return [...acc, {category: category, followers: _followers}]
}, [])
}
console.log(formatFollowers(followers))
我有一个对象数组: 寻找一个简单的一行返回: 因此,我可以很容易地泵到一个反应下拉与适当的键。 我觉得这个简单的解决方案应该可以工作,但是我得到了无效的语法错误:
我有以下练习: 编写一个名为createListOfObjects的函数,该函数接受 包含名字和姓氏以及返回值的字符串数组 一个对象数组,每个对象都具有属性 和以及名字和姓氏值 对应值* var namesList=['Cameron Betts','Shana Lopez','Angela li']* createListOfObjects(名称列表) = 到目前为止,我的解决方案是: 但它返回
我有一个对象数组。每个对象都有一个键“username”。 有没有一种快速的方法可以将这个对象数组按升序排序? 谢谢
我正在尝试将我的对象[]数组映射并过滤到int[]数组。如果对象是int,效果很好,但如果不是int,则抛出强制转换异常。我想知道我是否可以在lambda表达式中附加一个try/catch?这是我的代码: 或者更好的方法是试着抓住整个街区?
这是UML图中的实例方法: 此方法的目的是返回客户银行账户的所有汇总详细信息。 BankAccount是包含名称、帐户编号、余额和状态的类: 在BankManager类中,有一个实例变量: 方法),这将打印出所有的客户详细信息?
我有一个回应 正文 下面是我要映射的coreV2Response类
使用一个函数将数组的值映射到对象,其键值对中,原始值作为键,映射值作为值。 使用一个匿名的内部函数作用域来声明一个 undefined 的内存空间,使用闭包来存储返回值。 使用一个新的 Array 来存储带有函数映射的数组和一个逗号运算符来返回第二个步骤,而不需要从一个上下文移动到另一个上下文(由于闭包和操作顺序)。 const mapObject = (arr, fn) => (a => (
我有一个Object数组,它声明如下所示: 我需要根据每个对象的第三个元素,然后根据第二个元素对这些对象进行排序。因此我的输出将是: