let selectedRowKeys = [ "148#148#34", "148#148#33", "148#148#32", "140#141#25", "140#141#24", "149#149#38", "149#149#37", "149#149#36" ];JavaScript使用groupBy根据[140,148,149]生成新数组
时间: 2023-07-29 07:12:55 浏览: 41
你可以使用JavaScript的reduce方法和正则表达式来实现groupBy的功能,根据[140, 148, 149]生成新数组。以下是示例代码:
```javascript
let selectedRowKeys = [
"148#148#34",
"148#148#33",
"148#148#32",
"140#141#25",
"140#141#24",
"149#149#38",
"149#149#37",
"149#149#36"
];
let groupArray = [140, 148, 149];
let newList = selectedRowKeys.reduce((acc, curr) => {
let [objectId] = curr.split("#");
if (groupArray.includes(parseInt(objectId))) {
let groupIndex = groupArray.indexOf(parseInt(objectId));
if (!acc[groupIndex]) {
acc[groupIndex] = { objectId: objectId, itemIds: [] };
}
let [, , itemId] = curr.split("#");
acc[groupIndex].itemIds.push(parseInt(itemId));
}
return acc;
}, []);
console.log(newList);
```
在这个例子中,我们定义了selectedRowKeys数组和groupArray数组。selectedRowKeys是我们的初始数据,groupArray是我们要根据的分组依据。
我们使用reduce方法来遍历selectedRowKeys数组,并根据每个元素的objectId进行分组。我们首先使用split方法将每个元素按照"#"进行拆分,得到objectId、deviceId和itemId。然后,我们使用includes方法检查objectId是否存在于groupArray中。
如果存在,我们使用indexOf方法获取objectId在groupArray中的索引,然后检查在newList中是否已经有对应的分组对象。如果没有,则创建一个新的分组对象,并将其添加到newList中。
最后,我们将itemId转换为整数,并将其添加到对应分组对象的itemIds数组中。
最终结果将存储在newList数组中,并通过console.log输出。
输出结果为:
```javascript
[
{ objectId: 148, itemIds: [34, 33, 32] },
{ objectId: 140, itemIds: [25, 24] },
{ objectId: 149, itemIds: [38, 37, 36] }
]
```