如何解决查找重复项并将其替换为具有相同索引位置的新数组
我需要通过键值“groupName”找到相同的元素,并将它们放在新数组中相同索引位置的一组,如果groupName为null,则将其保留在相同位置
例如:
// getting day of the week
private val dayOfWeek: DayOfWeek = LocalDate.Now().dayOfWeek
// ordinal
private val dayNum: Int = dayOfWeek.ordinal()
...
private fun forecastDays() {
binding.tvDay1.text = DayOfWeek.values()[(dayNum + 1) % 7].name()
binding.tvDay2.text = DayOfWeek.values()[(dayNum + 2) % 7].name()
binding.tvDay3.text = DayOfWeek.values()[(dayNum + 3) % 7].name()
...
期待这样的事情:
const list = [
{
id: 1,groupName: null
},{
id: 2,groupName: 'group_1'
},{
id: 3,{
id: 4,groupName: 'group_2'
},{
id: 5,{
id: 6,...
];
我尝试为此使用reduce,但无法在newList 中保存相同的索引位置 这样做的最佳方法是什么?
解决方法
[编辑] 根据您的最后一条评论,如果您还想将 groupName
为 null
的对象分组,您只需修改我之前发布的代码
const list = [
{ id: 1,groupName: null },{ id: 2,groupName: 'group_1' },{ id: 3,{ id: 4,groupName: 'group_2' },{ id: 5,{ id: 6,];
const newList = list.reduce((acc,item) => {
const arr = acc.find(_item => Array.isArray(_item) && _item[0].groupName === item.groupName);
arr ? arr.push(item) : acc.push([item]);
return acc
},[]);
// test
console.log(newList);
[ORIGINAL] 我不是 100% 确定我了解您的要求,但是,鉴于您的 list
输入数组,您可以通过以下方式获得 newList
输出:
const list = [
{ id: 1,item) => {
if (!item.groupName) {
acc.push(item);
} else {
const arr = acc.find(_item => Array.isArray(_item) && _item[0].groupName === item.groupName);
arr ? arr.push(item) : acc.push([item]);
}
return acc
},[]);
// test
console.log(newList);
简而言之:
- 您检查当前项目是否有一个虚假的
groupName
,如果有,则将其推入输出数组 - 否则,您检查是否已经存在项
groupName
的子数组,如果找到,则将该项推送到现有子数组中,否则将新子数组推送到输出数组中包含项目的数组
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。