js单行代码处理数据汇总 ———— 数组篇(一)

1、将值转换为数组

const castArray = (value) => (Array.isArray(value) ? value : [value]);

实例

castArray ( 1 ) ; // [1]

castArray ( [ 1 , 2 , 3 ] ) ; // [1, 2, 3]

2、检查数组是否为空

// `arr` is an array
const isEmpty = (arr) => Array.isArray(arr) && !arr.length;

Examples

isEmpty([]); // true

isEmpty([1, 2, 3]); // false

3、克隆数组

// `arr` is an array
const clone = (arr) => arr.slice(0);

// Or
const clone = (arr) => [...arr];

// Or
const clone = (arr) => Array.from(arr);

// Or
const clone = (arr) => arr.map((x) => x);

// Or
const clone = (arr) => JSON.parse(JSON.stringify(arr));

// Or
const clone = (arr) => arr.concat([]);

// Or
const clone = (arr) => structuredClone(arr);

 4、比较两个数组而不考虑顺序

// `a` and `b` are arrays
const isEqual = (a, b) => JSON.stringify([...new Set(a)].sort()) 
=== JSON.stringify([...new Set(b)].sort());

isEqual([1, 2, 3], [1, 2, 3]); // true

isEqual([1, 2, 3], [1, 3, 2]); // true

isEqual([1, 2, 3], [1, '2', 3]); // false

5、比较两个数组

// `a` and `b` are arrays
const isEqual = (a, b) => JSON.stringify(a) === JSON.stringify(b);

// Or
const isEqual = (a, b) => a.length === b.length &&
 a.every((v, i) => v === b[i]);

example

isEqual([1, 2, 3], [1, 2, 3]); // true

isEqual([1, 2, 3], [1, '2', 3]); // false

6、将对象数组转换为自定义键的单个对象

const toObject = (arr, key) => arr.reduce((a, b) =>
 ({ ...a, [b[key]]: b }), {});

// Or
const toObject = (arr, key) => Object.fromEntries(arr.map((it) =>
[it[key], it]));

 

 7、将字符串数组转换为数字

const toNumbers = (arr) => arr.map(Number);

// Or
const toNumbers = (arr) => arr.map((x) => +x);

example

toNumbers(['2', '3', '4']); // [2, 3, 4]

8、按对象数组的属性计数

const countBy = (arr, prop) => arr.reduce((prev, curr) =>
 ((prev[curr[prop]] = ++prev[curr[prop]] || 1), prev), {});

9、 计算数组中某个值的出现次数

const countOccurrences = (arr, val) => arr.reduce((a, v) => 
(v === val ? a + 1 : a), 0);

// Or
const countOccurrences = (arr, val) => arr.filter((item) =>
 item === val).length;

Examples

countOccurrences([2, 1, 3, 3, 2, 3], 2); // 2

countOccurrences(['a', 'b', 'a', 'c', 'a', 'b'], 'a'); // 3

10、计算数组元素的出现次数

const countOccurrences = (arr) => arr.reduce((prev, curr) => 
((prev[curr] = ++prev[curr] || 1), prev), {});

example

countOccurrences([2, 1, 3, 3, 2, 3]); // { '1': 1, '2': 2, '3': 3 }

countOccurrences(['a', 'b', 'a', 'c', 'a', 'b']); // { 'a': 3, 'b': 2, 'c': 1 }

11、创建一个累计数组

const accumulate = (arr) =>
    arr.map(
        (
            (sum) => (value) =>
                (sum += value)
        )(0)
    );

// Or
const accumulate = (arr) => arr.reduce((a, b, i) => 
(i === 0 ? [b] : [...a, b + a[i - 1]]), [0]);

example

accumulate([1, 2, 3, 4]); // [1, 3, 6, 10]

// 1 = 1

// 1 + 2 = 3

// 1 + 2 + 3 = 6

// 1 + 2 + 3 + 4 = 10

12、 在给定范围内创建一个数字数组

const range = (min, max) => [...Array(max - min + 1).keys()]
.map((i) => i + min);

// Or
const range = (min, max) =>
    Array(max - min + 1)
        .fill(0)
        .map((_, i) => min + i);

// Or
const range = (min, max) => Array.from({ length: max - min + 1 },
 (_, i) => min + i);

example

range(5, 10); // [5, 6, 7, 8, 9, 10]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenshuai5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值