ntscshen / ntscshen.github.io

个人博客
0 stars 2 forks source link

「数据转换二」去重 & 数组扁平化 #23

Open ntscshen opened 2 years ago

ntscshen commented 2 years ago

这个实际开发中有多常用就不用再赘述了。 写这篇主要为了 缕个思路。

const data = [1,2,2,3,3,4,4,4,5,5,5]
const data = [
  {
    "goodsId": "1",
    "quota": 12,
    "skuId": "1"
  },
  {
    "goodsId": "2",
    "quota": 22,
    "skuId": "2"
  },
  {
    "goodsId": "1",
    "quota": 12,
    "skuId": "1"
  },
]

去重普通数字

  1. 方法一
    
    const data = [1,2,2,3,3,4,4,4,5,5,5]
    // 1. 将其转换为Set结构,利用 Set 中的元素是唯一的特性。 new Set(arr)
    // 2. 用...(展开操作符) 将 Set 转换为 Array。 [...new Set(arr)]
    const uniq = (arr) => {
    return [...new Set(arr)]
    }

uniq(data);

2. 方法二
> 至于其他的循环变种,看心情写
```js
const data = [1,1,1,2,2,2,3,3,3,4];

function uniq(arr) {
    const result = [];
    arr.forEach(item => {
      if (result.indexOf(item) === -1) {
        result.push(item);
      }
    })
    return result;
}
uniq(data)

去重对象数组

利用对的key无法重复


const data = [
{
"goodsId": "1",
"quota": 12,
"skuId": "1"
},
{
"goodsId": "2",
"quota": 22,
"skuId": "2"
},
{
"goodsId": "1",
"quota": 12,
"skuId": "1"
},
]

function uniqBy(arr, uniId) { const result = []; const tempObj = {}; arr.forEach(item => { if (!tempObj[item[uniId]]) { result.push(item); tempObj[item[uniId]] = true; } }) return result; } console.log(uniqBy(data, 'skuId'));

ntscshen commented 2 years ago

来一个脑残的题,实际开发中我是没遇到过。 扁平化就是将多维数组变成一维数组

[1, [2, [3, [4, 5]]], 6] 将其扁平化处理 输出: [1,2,3,4,5,6]

  1. 递归
    
    const arr = [1, [2, [3, [4, 5]]], 6];

function flat(arr, result = []) { arr.forEach(item => { if (Array.isArray(item) && item.length) { result = flat(item, result); } else { result.push(item); } }) return result; } flat(arr);

1. 非递归
```js
const arr = [1, [2, [3, [4, 5]]], 6];

function flat(arr) {
  while (arr.some(item => Array.isArray(item))) {
    arr = [].concat(...arr);
  }
  return arr;
}
flat(arr);