【JavaScript】 ---- 数组元素的添加和删除

1. 实现预览

在这里插入图片描述

2. 实现分析

  1. 实现就是对数组元素的位置改变;
  2. 使用数组的 splice 方法实现;
  3. 使用 es6 解构赋值。

3. 实现操作函数

  // 数组操作
  function handleList(type, list, idx, value){
    return {
      'delete': () => { // 删除
        list.splice(idx, 1)
        return [...list]
      },
      'add': () => { // 新增
        list.splice(idx, 0, value)
        return [...list]
      },
      'up': () => { // 上移
        [list[idx], list[idx - 1]] = [list[idx - 1], list[idx]]
        return [...list]
      },
      'down': () => { // 下移
        [list[idx], list[idx + 1]] = [list[idx + 1], list[idx]]
        return [...list]
      },
      'top': () => { // 置顶
        return [...list.splice(idx,1), ...list]
      },
      'bottom': () => { // 置底
        let val = list.splice(idx,1)[0]
        return [...list, val]
      }
    }[type]?.()
  }

4. 操作函数的使用

  // 操作时间
  function handleTime(type, idx){
    let value = {
      start: '', 
      end: '', 
      keyId: api.generateId()
    }
    times = handleList(type, times, idx, value)
    setTimes([...times])
  }

5. 调用

  // 获取选择时间
  function getChooseTimeHtml(){
    if(times?.length){
      return times.map((item,idx) => <View key={item.keyId}>
        <View className='rui-mine-form-li rui-flex-ac'>
          <Text className='rui-fa rui-fs30 rui-mr20'>营业开始时间:</Text>
          <View className='rui-fg rui-fs30 rui-colorl2 rui-flex-ac'>
            <Picker mode='time' 
              onChange={getChooseValue.bind(null, idx, 'start')} 
              value={item.start}
              className='rui-fg rui-flex-ac'>
              <View className='rui-fg rui-choose-value'>{item.start || '请选择营业开始时间'}</View>
            </Picker>
            <Image src={icon.rightIcon} className="rui-choose-icon"></Image>
          </View>
        </View>
        <View className='rui-mine-form-li rui-flex-ac'>
          <Text className='rui-fa rui-fs30 rui-mr20'>营业结束时间:</Text>
          <View className='rui-fg rui-fs30 rui-colorl2 rui-flex-ac'>
            <Picker mode='time' 
              onChange={getChooseValue.bind(null, idx, 'end')} 
              value={item.end}
              className='rui-fg rui-flex-ac'>
              <View className='rui-fg rui-choose-value'>{item.end || '请选择营业结束时间'}</View>
            </Picker>
            <Image src={icon.rightIcon} className="rui-choose-icon"></Image>
          </View>
        </View>
        <View className='rui-flex-ac'>
          <View className='rui-fg'>
            <View className='rui-advice-btn rui-flex-cc rui-mt30'
              onClick={handleTime.bind(null, 'up', idx)}>上移</View>
          </View>
          <View className='rui-fg'>
            <View className='rui-advice-btn rui-flex-cc rui-mt30'
              onClick={handleTime.bind(null, 'down', idx)}>下移</View>
          </View>
          <View className='rui-fg'>
            <View className='rui-advice-btn rui-flex-cc rui-mt30'
              onClick={handleTime.bind(null, 'top', idx)}>置顶</View>
          </View>
          <View className='rui-fg'>
            <View className='rui-advice-btn rui-flex-cc rui-mt30'
              onClick={handleTime.bind(null, 'bottom', idx)}>置底</View>
          </View>
        </View>
        <View className='rui-flex-sb'>
          <View className='rui-fa' style={`width:45%;`}>
            { getDeleteBtnHtml(idx) }
          </View>
          <View className='rui-fa' style={`width:45%;`}>
            <View className='rui-reset-btn rui-flex-cc rui-mt30'
              onClick={handleTime.bind(null, 'add', idx + 1)}>添加营业时间</View>
          </View>
        </View>
      </View>)
    }
  }
  // 获取删除按钮
  function getDeleteBtnHtml(idx){
    if(idx > 0){
      return <View className='rui-advice-btn rui-flex-cc rui-mt30' 
        onClick={handleTime.bind(null, 'delete', idx)}>删除营业时间</View>
    }
  }
注意:splice 操作的是当前位置,因此我们如果是在当前位置后添加,就应该将传入下标 + 1!!!

6. 总结

  1. 将操作数组的模式集中到一个工具类中,方便后期统一处理操作!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Rattenking

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

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

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

打赏作者

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

抵扣说明:

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

余额充值