吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 763|回复: 6
收起左侧

[求助] JS多维数组indexOf的问题

  [复制链接]
cqwcns 发表于 2021-12-22 16:13
我们有一个数组(arr),用于滚动选择器picker选择行政区域。
后台返回一个已选数据的数组(selected ),现在要通过“已选数据的数组”输出正确的picker值。
例如['深圳', '南山'],应该输出[2, 0]。


这个输出代码应该怎么写?没转过弯来,下面我尝试写了一下,未实现功能,求指教。

[JavaScript] 纯文本查看 复制代码
    const arr = [
      ['北京', '广州', '深圳', '曹县'],
      [
        ['天安门', '颐和园', '故宫'],
        ['天河', '荔湾', '珠江新城'],
        ['南山', '蛇口', '小梅沙'],
        ['山东', '齐鲁', '烟台']
      ]
    ],
      selected = ['深圳', '南山'],
      value = [];

    for (let i = 0; i < selected.length; i++) {
      value.push(arr[i].indexOf(selected[i]))
    }

    console.log(value)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| cqwcns 发表于 2021-12-22 16:22
这样可以实现,但感觉很傻,而且代码写死了。
DEMO的地址arr是二级的,如果改为三级,这个代码又不适用了。
[JavaScript] 纯文本查看 复制代码
    for (let i = 0; i < selected.length; i++) {
      if (i == 0) {
        value.push(arr[i].indexOf(selected[i]))
      } else {
        value.push(arr[i][value[0]].indexOf(selected[i]))
      }
    }


看看各位有什么好的写法,谢谢
不苦小和尚 发表于 2021-12-22 16:36
 楼主| cqwcns 发表于 2021-12-22 16:40
 楼主| cqwcns 发表于 2021-12-22 16:41
自己研究了一下,初步解决了,代码兼容2级、3级,理论上多少级都可以。

分享代码,如果有改进建议,欢迎指教。

[JavaScript] 纯文本查看 复制代码
    const arr = [
      ['北京', '广州', '深圳', '曹县'],
      [
        ['天安门', '颐和园', '故宫'],
        ['天河', '荔湾', '珠江新城'],
        ['南山', '蛇口', '小梅沙'],
        ['山东', '齐鲁', '烟台']
      ],
      [
        [['天安门1', '天安门2'], ['颐和园1', '颐和园2'], ['故宫1', '故宫2']],
        [['天河1', '天河2'], ['荔湾1', '荔湾2'], ['珠江新城1', '珠江新城2']],
        [['南山1', '南山2'], ['蛇口1', '蛇口2'], ['小梅沙1', '小梅沙2']],
        [['山东1', '山东2'], ['齐鲁1', '齐鲁2'], ['烟台1', '烟台2']]
      ]
    ],
      selected = ['广州', '珠江新城', '珠江新城1'],
      value = [];

    for (let i = 0; i < selected.length; i++) {
      let range = arr[i];
      value.forEach(el => {
        range = range[el]
      });
      value.push(range.indexOf(selected[i]))

    }

    console.log(value)  //[1, 2, 0]
涛之雨 发表于 2021-12-22 18:41
如果想兼容性更高的话就要写自定义迭代器或者递归实现

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 用心讨论,共获提升!

查看全部评分

unmask 发表于 2021-12-22 20:39
增加非法输入的兼容性

[JavaScript] 纯文本查看 复制代码
  const value = selected.reduce((rs, c, i) => {
    const range = rs.reduce((r, x) => r[x] || [], arr[i] || []);
    rs.push(range.indexOf(c));
    return rs;
  }, []);

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 用心讨论,共获提升!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 17:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表