我正在学习JavaScript,遇到以下情况:
我的代码:
alfabetoMadegues = "jngmclqskrzfvbwpxdht"
var listaLetras = Array.from(alfabetoMadegues);
dicionario_Madegues = {};
for (var i = 0 < listaLetras.length; i++;) {
listaLetras.forEach(element => {
dicionario_Madegues[element] = i;
})
};
如果“ j”是数组的第一个元素,那么“ j”为什么接收2而不是0?为什么我得到这个结果?
预期结果应该是:
"j" 0
"n" 1
"g" 2
"m" 3
"c" 4
"l" 5
答案 0 :(得分:6)
ES6解决方案 又名ECMA2015 -see compatibility table
作为Array.forEach
的第二个参数,您可以获取元素的位置;例如:
const alfabetoMadegues = 'jngmclqskrzfvbwpxdht';
const listaLetras = Array.from(alfabetoMadegues);
const dicionario_Madegues = {};
listaLetras.forEach((x, xi) => {
dicionario_Madegues[x] = xi;
});
console.log(dicionario_Madegues);
此外,使用Array.reduce
更合适;例如
PS::我们使用了Spread运算符...
和动态键名[x]
。
const alfabetoMadegues = 'jngmclqskrzfvbwpxdht';
const listaLetras = Array.from(alfabetoMadegues);
const dicionario_Madegues = listaLetras.reduce((tmp, x, xi) => ({
...tmp,
[x]: xi,
}), {});
console.log(dicionario_Madegues);
ES5解决方案
var alfabetoMadegues = 'jngmclqskrzfvbwpxdht';
var listaLetras = Array.from(alfabetoMadegues);
var dicionario_Madegues = {};
for (var i = 0; i < listaLetras.length; i += 1) {
dicionario_Madegues[listaLetras[i]] = i;
}
console.log(dicionario_Madegues);
答案 1 :(得分:4)
您不希望forEach
内的for
。对于您描述的输出,您只想删除它并用dicionario_Madegues[listaLetras[i]] = i;
代替。
您的for
循环中也有一个错误。你有:
for (var i = 0 < listaLetras.length; i++;) {
...它将永远运行。初始化和测试应使用;
分开:
for (var i = 0; i < listaLetras.length; i++) {
// -----------^^^--------------------------^ (no `;` after `i++`)
实时示例:
var alfabetoMadegues = "jngmclqskrzfvbwpxdht";
var listaLetras = Array.from(alfabetoMadegues);
var dicionario_Madegues = {};
for (var i = 0; i < listaLetras.length; i++) {
dicionario_Madegues[listaLetras[i]] = i;
}
console.log(dicionario_Madegues);
还要注意我移去并添加了;
的各个地方。可能值得为他们复习规则。
答案 2 :(得分:0)
您循环了两次:
for (var i = 0 < listaLetras.length; i++;) { // HERE
listaLetras.forEach(element => { //HERE
dicionario_Madegues[element] = i;
})
};
因此,您必须使用for
或forEach
:
alfabetoMadegues = "jngmclqskrzfvbwpxdht"
var listaLetras = Array.from(alfabetoMadegues);
var dicionario_Madegues_CON_FOR = {};
var dicionario_Madegues_CON_FOREACH = {};
for (var i = 0 ; i < listaLetras.length ; i++ ) {
dicionario_Madegues_CON_FOR[listaLetras[i]] = i;
};
listaLetras.forEach((letra, indice) => dicionario_Madegues_CON_FOREACH[letra] = indice);
console.log(dicionario_Madegues_CON_FOR);
console.log(dicionario_Madegues_CON_FOREACH);
您的for
中也存在sintax错误:
for (var i = 0 < listaLetras.length; i++;)
应该是
for(var i = 0 ; i < listaLetras.length ; i++ )
答案 3 :(得分:0)
除了提供的答案外,您还可以考虑以下方法:
alfabetoMadegues = "jngmclqskrzfvbwpxdht"
var obj = {}
alfabetoMadegues.split('').forEach((element, index) => obj[element] = index)
console.log(obj)
答案 4 :(得分:0)
此行有误
for (var i = 0 < listaLetras.length; i++;) {
for
构造包含三个部分:
每个部分都用;分隔。
您已经伪装了条件(i < listaLetras.length)
并进行了初始化。事后的想法留空了。
正确的代码应该是
for (var i = 0; i < listaLetras.length; i++) {
j为2的原因有两个;
在循环的第一遍,我将设置i < listaLetras.length
的值-该值为true。
接下来,循环将运行比较(以检查是否应运行循环的主体)。这里的比较是.... i++
!我是对的,所以比较通过了,然后我增加了。
i的值 true 隐式转换为1。
当我们点击循环的主体时,现在是2。
您还将使用foreach函数循环两次-将发生的i的每个迭代将每个值设置为i。