javascript - javascript返回嵌套对象数组并排列相似类型
问题描述
javascript返回嵌套对象数组并排列相似类型
我有对象
let obj1 = { categoryId:1, category:"Fruits", name:"Orange"}
let obj2 = { categoryId:1, category:"Fruits",name:"Apple"}
let obj3 = { categoryId:2, category:"Vegetables", name:"Onion"}
let obj4 = { categoryId:2, category:"Vegetables", name:"Ginger"}....etc
我想从这个预期的数组创建一个嵌套对象数组:
let result =
[
{
name: "Fruits", values: [
{
"categoryId": 1,
"category": "Fruits",
"name": "Orange"
},
{
"categoryId": 1,
"category": "Fruits",
"name": "Apple"
}
]
},
{ name:"Vegetables", values: [
{
"categoryId": 2,
"category": "Vegetables",
"name": "Onion"
},
{
"categoryId": 2,
"category": "Vegetables",
"name": "Ginger"
}
]
}
]
我正在寻找一种功能,而不是一次全部添加到地图中
addtoArray( obj1);
addtoArray( obj2);
addtoArray( obj3);
addtoArray( obj4);....etc
还有一个删除功能:
removeFromArray( obj1);
在删除对象不能相同:
{ categoryId:1, category:"Fruits", name:"Orange", newItem:"newvalue"}
它应该使用category:"Fruits"
参考删除
删除一个对象,直到组中没有更多对象。然后该组也被删除。
我尝试的是下面
function addtoArray(collection, object) {
if (!collection[object.category]) {
collection[object.category] = [object];
return;
}
if (collection[object.category].includes(object)) return;
collection[object.category].push(object);
}
function removeFromArray(collection, object) {
if (!collection[object.category]) return;
var index = collection[object.category].indexOf(object);
if (index === -1) return;
collection[object.category].splice(index, 1);
if (!collection[object.category].length) delete
collection[object.category];
}
var obj1 = { categoryId: 1, category: "Fruits", name:"Orange" },
obj2 = { categoryId: 1, category: "Fruits", name:"Apple" },
obj3 = { categoryId: 2, category: "Vegetables", name:"Onion" },
obj4 = { categoryId: 2, category: "Vegetables", name:"Ginger" },
collection = {};
请指导我!!
解决方案
添加到数组的函数:
var arr=[];
const addToArray=(arr,obj)=>{
const index=findByName(arr,obj.category);
if(index>-1){
arr[i].values.push(obj)
}else{
arr.push({
name:obj.category,
values:[obj]
})
}
}
const findByName=(arr,name)=>{
for(var i=0;i<arr.length;i++){
if(arr[i].name===name)
return i;
}
return -1;
}
addToArray(arr,obj1)
推荐阅读
- google-apps-script - 如何在移动设备上禁用 Gmail 插件?
- yocto - 如何在 yocto AGL 中添加 pciutils 包?
- angular - 如何调用多个 API 并在 Angular 6 中订阅?
- javascript - js中不同的动画效果
- java - jersey2 的 Web.xml 不允许来自其他应用程序的休息调用
- sql - 如何迭代变量?我收到错误 PLS-00103
- bash - 如果条件不起作用,则 shell 脚本中的正则表达式
- javascript - 将数组数组转换为带有键的对象
- php - SQLSTATE[HY000] [2054] 服务器向客户端发送未知字符集。请向开发人员报告
- android - 在地图上方叠加