JavaScript 数组之flat和flatMap

    在 JavaScript 中,flat()flatMap() 都是数组的方法,它们可以用来处理嵌套数组,但它们的功能有所不同。

1、flat

用途

   flat() 方法用于创建一个新数组,该新数组将原始数组中的所有子数组连接到指定深度的层级。这对于简化多维数组非常有用。

array.flat([depth])

array: 要展平的原始数组。
depth (可选): 指定展平的最大深度。默认值为 1

onst arr = [1, 2, [3, 4, [5, 6]], 7];
const flattened = arr.flat(2); // 展平两层
console.log(flattened); // 输出: [1, 2, 3, 4, [5, 6], 7]

const fullyFlattened = arr.flat(Infinity); // 完全展平
console.log(fullyFlattened); // 输出: [1, 2, 3, 4, 5, 6, 7]
使用场景
  • 当你需要将多维数组简化为单个一维数组时。
  • 当你需要处理嵌套的数据结构,例如 JSON 数据,并希望简化数据访问

2. flatMap()

用途

       flatMap() 方法首先映射然后展平数组。它允许你对每个元素应用一个转换函数,然后将结果展平到一层。这使得它非常适合于在转换数组的同时保持数据的一致性。

示例
array.flatMap(callback[, thisArg])

callback: 一个回调函数,它为每个元素调用并返回新的元素。
thisArg (可选): 执行回调时使用的 this 值。

const numbers = [1, 2, 3];
const doubledAndFlattened = numbers.flatMap(x => [x * 2]);
console.log(doubledAndFlattened); // 输出: [2, 4, 6]

const nestedNumbers = [1, [2, 3], 4];
const flattened = nestedNumbers.flatMap(x => Array.isArray(x) ? x : [x]);
console.log(flattened); // 输出: [1, 2, 3, 4]

比如我有一个数组 name 以顿号分割和 count也以对号分割  两条变成6条

  
let arr = [
    { name: "张三、李四", num: 10000, count: "上天、入地" },
    { name: "王五", num: 20000, count: "下海、游泳" },
  ];

结果

[
    { name: "张三", num: 10000, count: "上天" },
    { name: "张三", num: 10000, count: "入地" },
    { name: "李四", num: 10000, count: "上天" },
    { name: "李四", num: 10000, count: "入地" },
    { name: "王五", num: 20000, count: "下海" },
    { name: "王五", num: 20000, count: "游泳" }
]
// 分割名称和计数字段
  let splitData = arr.flatMap((item) => {
    let names = item.name.split("、");
    let counts = item.count.split("、");

    return counts.flatMap((count) => {
      return names.map((name) => ({
        name,
        num: item.num,
        count,
      }));
    });
  });

  console.log(splitData);

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值