javascript - 使用对象数组的对象中的唯一元素创建新对象

标签 javascript arrays object javascript-objects associative-array

我有一个对象数组。这个数组中的每个对象都有一些 key 对。其中一个 key 对(例如“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,所以我不知道这个 key 对的名称,但我需要存储它们。

我有解决方案,但我是 JavaScript 的新手,想知道如何简化和改进我糟糕的代码

1.首先,我正在定义新对象并从“arrOfObj”中检索其 key 对的名称。

let filterObj = {};

arrOfObj.forEach(function (item) {
  for (let key in item.obj) {
    filterObj[key] = [];
  }
});

2. 之后,我从“arrOfObj”获取每个数组的所有元素,并将它们存储在具有相同名称的 key 对中的新对象“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]));
}

它有效,我得到了我想要的东西,但它看起来太可怕了。如何以最佳方式简化此代码?

感谢您的帮助和建议。

最佳答案

您可以使用一些解构和 Object.entries() 和 Object.keys() 来简化这一点,并只对新对象执行所有操作

const newObj  = {}

arrOfObj.forEach(({obj}) => {
    Object.entries(obj).forEach(([k, arr]) => {
       newObj[k] = newObj[k] || [];
       newObj[k].push(...arr);
    })
});

Object.keys(newObj).forEach(k => newObj[k] = [...new Set(newObj[k])]);

console.log(newObj)
<script>
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"]}}];
</script>

关于javascript - 使用对象数组的对象中的唯一元素创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67350658/

相关文章:

javascript - 用于在 Google Maps v3 上创建多条路线的数组

javascript - 在 JavaScript 中连续遍历数组

c - C 中数组的元素变成随机的

javascript - Json 格式的对象到带有新键的简单数组

java - 在循环中创建对象

javascript - 有什么方法可以在 Express 的 POST 请求中获取 csrf token 吗?

javascript - sweetalert2 消失后重定向到页面

php - 使用 iframe 获取 $_SERVER ['HTTP_X_REQUESTED_WITH' ]

arrays - 如何通过在 slice 上查找来从 slice 复制到数组

java - 在 java 主方法之外初始化一个对象