1
enchilada2020 2022-03-03 21:10:27 +08:00 via Android
const map = new Map (arr.map((v, i)=> [v, i]));
map.get(v); |
2
zcf0508 2022-03-03 21:16:06 +08:00 via Android
findIndex ?
|
3
jamfer OP @enchilada2020 我并不是想要利用值得到键,我主要是想要用遍历数组批量创建变量。为了好描述一些帖子简化了。
|
4
enchilada2020 2022-03-03 21:20:57 +08:00 via Android 1
@jamfer arr.forEach ((v. i) => window[v] = i)
|
5
enchilada2020 2022-03-03 21:22:39 +08:00 via Android
@enchilada2020 或者把 window 换成 globalThis 如果在 node 跑的话
|
6
dcsuibian 2022-03-03 21:23:41 +08:00
你先说说你总体要干啥,一般变量名不应该用这种动态的方式创建
|
7
jamfer OP @jamfer 非常感谢,可以实现我的需求了,不过同时又遇到一个蛋疼的问题。劳驾给看一下。
var rs; arr.forEach((v, i) => { loader.load(v+'.glb', (g)=>{ rs = g.scene; }); }); console.log(rs); 这种情况下,在 loader 里给 rs 赋值,在外面输出还是 undefined 。请问有没有解决办法? |
8
jowin 2022-03-03 21:48:40 +08:00
eval(['scorner_02', 'sdoor_04', 'sdoor_03', 'sdoor_06', 'sdoor_01', 'raised_02', 'sdoor_02', 'station', 'sdoor_03', 'scorner_01'].map((v, index) => v + '=' + index).join(';'))
|
9
MonoLogueChi 2022-03-03 22:04:45 +08:00
@jamfer #7 ,看一下 loader.load ,我猜这可能是一个异步方法
|
10
tedding 2022-03-03 22:57:51 +08:00 via iPhone
提示:浏览器( node )环境定义的变量并不是孤立存在的😂😂😂
|
11
vace 2022-03-03 23:25:44 +08:00 1
@jamfer 建议多了解些 js 基础,区分同步与异步的区别,从上下文看,你是想加载一组 glb 模型后使用,可以用 Promise 的异步处理方法:
```js const resList = ['scorner_02','sdoor_04','sdoor_03'] const store = new Map() const task = Promise.all(resList.map(key => new Promise(resolve => loader.load(key + '.glb', g => { resolve(g) store.set(key, g) })))) // 加载完成后读取资源 task.then(() => { console.log(store.get('scorner_02')) }) ``` |
12
learningman 2022-03-04 00:58:19 +08:00
要不 eval 吧(
|
13
MegrezZhu 2022-03-04 05:04:15 +08:00
突然有种 CMD module 的既视感
|
14
wenzhonghu 2022-03-04 05:48:06 +08:00
@jamfer 你这个所谓的创建变量,从 JS 的角度来看只是在全局空间对象里直接添加属性而不是真正意义上的创建变量
|
15
yeqizhang 2022-03-04 08:34:02 +08:00 via Android
数组哪叫什么键,index 索引 下标吧
|
16
wangtian2020 2022-03-04 08:39:42 +08:00
let street_01 = ['scorner_02', 'sdoor_04', 'sdoor_03', 'sdoor_06', 'sdoor_01', 'raised_02', 'sdoor_02', 'station', 'sdoor_03', 'scorner_01'];
let obj={} street_01.forEach((value,index) => { obj[value]=index }) console.log(obj.scorner_02);//0 console.log(obj.sdoor_03);//8 你这案例里面怎么有两个 'sdoor_03',那先转 set 数组一下? |
17
wangtian2020 2022-03-04 08:40:56 +08:00
访问对象上的以变量为属性名的属性,可以用中括号[]访问
|
18
wangtian2020 2022-03-04 08:45:12 +08:00
let street_01 = ['scorner_02', 'sdoor_04', 'sdoor_03', 'sdoor_06', 'sdoor_01', 'raised_02', 'sdoor_02', 'station', 'sdoor_03', 'scorner_01'];
street_01 = new Set(street_01) street_01 = Array.from(street_01) street_01.forEach((value,index) => { globalThis[value]=index }) console.log(scorner_02);//0 console.log(sdoor_03);//2 |
19
yangzzzzzz 2022-03-04 08:57:50 +08:00 1
这种情况用对象不是更好吗 取值时直接用 key 取还能更精准
|
20
RickyC 2022-03-04 09:31:50 +08:00
JS 拼接变量名,我只知道 eval()
|
21
mxT52CRuqR6o5 2022-03-04 10:38:01 +08:00
典型的 XY 问题
|
22
zhuweiyou 2022-03-04 12:35:21 +08:00
11 楼正解
|
23
wonderl17 2022-03-04 14:21:07 +08:00
for (let i = 0; i < street_01.length; i++) {
eval(`var ${street_01[i]} = ${i}`); } |