我有一个对象数组,每个对象都有一些键值对。其中一个键值对(例如“obj”)也是对象数组。
例如:
const arrOfObj = [
{
"id": 1
"obj": {
"arr1": ["arr1-1"],
"arr2": ["arr2-1", "arr2-2"],
"arr3": ["arr3-1", "arr3-2"]
}
},
{
"id": 1
"obj": {
"arr1": ["arr1-2"],
"arr2": ["arr2-1", "arr2-3"],
"arr3": ["arr3-1", "arr3-3"],
"arr4": ["arr4-1"],
}
},
];
我需要获取一个新的“obj”对象,其中包含唯一的键和其中唯一的元素。
需要的示例:
const newObj = {
"arr1": ["arr1-1", "arr1-2"],
"arr2": ["arr2-1", "arr2-2", "arr2-3"],
"arr3": ["arr3-1", "arr3-2", "arr3-3"],
"arr4": ["arr4-1"],
}
所有这些都是通过API动态请求获取的,所以我不知道这些键值对的名称,但我需要将它们存储。
我有解决方案,但我是JavaScript的新手,想知道如何简化和改进我的代码。
1. 首先,我定义一个新对象,并从“arrOfObj”中检索出其键对应的名称。
let filterObj = {};
arrOfObj.forEach(function (item) {
for (let key in item.obj) {
filterObj[key] = [];
}
});
2. 然后我从"arrOfObj"获取每个数组的所有元素,并将它们存储在新对象"filterObj"中,与相同名称的键值对一起。
arrOfObj.forEach(function (item) {
for (let key in item.obj) {
for (let element = 0; element < item.obj[key].length; element++) {
filterObj[key].push(item.obj[key][element]);
}
}
});
3. 最后,我在过滤数组时只保留唯一元素。
for (let key in filterObj) {
filterObj[key] = Array.from(new Set(filterObj[key]));
}
它能够正常工作,我得到了我想要的,但它看起来非常庞大。如何以最简单的方式简化这段代码呢?
感谢帮助与建议。
forEach()
而不是更冗长的for
循环。 - charlietflObject.keys()
、Object.values()
和Object.entries()
的工作原理。 - charlietfl