JS多维数组indexOf的问题
我们有一个数组(arr),用于滚动选择器picker选择行政区域。后台返回一个已选数据的数组(selected ),现在要通过“已选数据的数组”输出正确的picker值。
例如['深圳', '南山'],应该输出。
这个输出代码应该怎么写?没转过弯来,下面我尝试写了一下,未实现功能,求指教。
const arr = [
['北京', '广州', '深圳', '曹县'],
[
['天安门', '颐和园', '故宫'],
['天河', '荔湾', '珠江新城'],
['南山', '蛇口', '小梅沙'],
['山东', '齐鲁', '烟台']
]
],
selected = ['深圳', '南山'],
value = [];
for (let i = 0; i < selected.length; i++) {
value.push(arr.indexOf(selected))
}
console.log(value) 这样可以实现,但感觉很傻,而且代码写死了。
DEMO的地址arr是二级的,如果改为三级,这个代码又不适用了。
for (let i = 0; i < selected.length; i++) {
if (i == 0) {
value.push(arr.indexOf(selected))
} else {
value.push(arr].indexOf(selected))
}
}
看看各位有什么好的写法,谢谢 深圳南山为什么是20啊 不苦小和尚 发表于 2021-12-22 16:36
深圳南山为什么是20啊
深圳的index是2
南山的index是0 自己研究了一下,初步解决了,代码兼容2级、3级,理论上多少级都可以。
分享代码,如果有改进建议,欢迎指教。
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;
value.forEach(el => {
range = range
});
value.push(range.indexOf(selected))
}
console.log(value)// 如果想兼容性更高的话就要写自定义迭代器或者递归实现 增加非法输入的兼容性
const value = selected.reduce((rs, c, i) => {
const range = rs.reduce((r, x) => r || [], arr || []);
rs.push(range.indexOf(c));
return rs;
}, []);
页:
[1]