有这样的一个数组,如何做下这种结果呢?

发布于 2022-09-30 23:10:56 字数 61 浏览 32 评论 0

有这样的数组[1,2,3,4,5],如何实现[[1,2], [2,3], [3,4] ....] 一出一入?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

墨小墨 2022-10-07 23:10:56
[1,2,3,4,5].reduce((res, v, i, arr) => {
    if(i < arr.length-1) res.push([v, arr[i+1]])
    return res;
}, [])
数理化全能战士 2022-10-07 23:10:56
var arr = [1, 2, 3, 4, 5]
arr = (arr.map((item, index) => (arr[index + 1]?[arr[index], arr[index + 1]]:undefined))).filter(item=>item)
天生の放荡 2022-10-07 23:10:56
const a = [1,2,3,4,5]
const b = a.map((item,index)=>[item,a[index+1]])
b.pop()
呆° 2022-10-07 23:10:56

不管你信不信,我又一次使用 Array.prototype.reduce 实现了你的需求:

const result = [1,2,3,4,5,6]
    .reduce((a, b, i) => 
        // 这是关键的一步,如果当前 a 的长度加于 1,那么就往 a 里面每次添加两条记录,分别为 a 最后一项以及 b
        a.length > 1 ? a.concat([a[a.length - 1], b]) : a.concat([b]), []
    )
    .reduce((a, b, i) => 
        // 这一步用来生成最终的结果数组,如果为偶数,则直接往 a 最后面加一条 `[b]` 作为元素
        // 如果为奇数,则从 a 里面删除最后一项,同时最后一项加上一个 b 之后,又重新添加至 a
        // 最后得到提主想到的结果,当然这并不是最简单的方式,不太容易让人看懂
        i % 2 === 0 ? a.concat([[b]]) : a.concat([a.pop().concat([b])]) , []
    )

使用 Array.prototype.map 的方式:

const result = [1,2,3,4,5,6]
    // 这里的关键是必须要使用到 `map` 方法的第三个参数,否则就需要把数组存储在一个变量里面了
    .map((a, i, o) => [a, o[i + 1]])
    // 因为上面这个 `map` 会导致最后一项是不应该出现的,其判断条件可以是
    // 最后一项目的第 `1` 个元素为 `undefined`
    .filter(e => e[1] !== undefined);

不使用 Array.prototype 的方式:

const original = [1,2,3,4,5];
const result = [];
for (let i = 0; i < original.length - 1; i += 1) {
  result.push([original[i], original[i + 1]])
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文