【问题标题】:Map an Array without using the last element of the Array映射一个数组而不使用数组的最后一个元素
【发布时间】:2021-08-18 21:04:27
【问题描述】:

是否可以在不使用Array 的最后一个元素并且不创建新的Array 进行映射的情况下映射Array

{array.map((arr, index) => {
        ...
    }
)}

所以如果数组是:

{ 'apple', 'bread', 'banana'}

只会映射applebread

这个问题的用例更多,因为我只是想知道这是否可能。我知道有一些解决方案可以使用拼接和创建更短的新数组,但我只是认为可以在不改变或创建新 Array's

的情况下解决这个问题

【问题讨论】:

  • map 将始终返回等于数组长度的值。因此,如果数组中有 8 个项目,那么使用 map 创建的结果数组的长度也应该为 8。过滤数组并使用 map 很好。
  • 这是不可能的,因为 map 返回 1:1 匹配的数组。
  • 用例是什么?因为使用map() 没有办法停止迭代,如果你没有从任何数组元素返回任何东西,那么undefined 将被返回。此外,您的“数组”似乎是创建对象的解构分配。
  • 像这样使用Array.slice() array.slice(0, -1).map(...)

标签: javascript arrays reactjs list


【解决方案1】:

最好使用reduce,避免Array.map()的undefined,并检查索引

const array = ['a', 'b', 'c']

const newArray = array.reduce((acc, next, index) => {
        if (index < array.length - 1) {
          return acc.concat(next)
        }
        return [...acc] }, [])
        
        console.log(newArray)

【讨论】:

    【解决方案2】:

    map 之前的切片数组?

    array.slice(0,-1).map((arr, index) => 
     ...
    })
    

    【讨论】:

    • 如果这个数组来自 state 或 props 那么我们不应该这样做,因为它可能会改变它们。
    • 我想过这样做,但我不确定这是否符合“不创建新数组”的标准,因为这会修改原始数组。但是这个问题是模棱两可的,并且没有提供足够的背景来确保问题得到解决。
    • 确实,如果您不想创建中间数组,最好在返回元素之前检查索引
    • 就像之前提到的,这是一个状态 Array 并且 slice'ing 确实改变了它。
    猜你喜欢
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2018-05-05
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    相关资源
    最近更新 更多