我正在学习新的JavaScript ES6语法,并尝试使用其他2个多维数组中的对象创建一个多维数组。大概我的语法不正确,但是我不知道如何解决它。结果应该是:
[
[{ letter: w, instances: 1
}, { letter: o, instances: 1
}, { letter: d, instances: 2
}, { letter: r, instances: 1
}],
[{ letter: s, instances: 1
}, { letter: y, instances: 1
}],
[{ letter: h, instances: 1
}, { letter: e, instances: 1
}, { letter: l, instances: 2
}, { letter: o, instances: 1
}]
]
我的代码使用两种映射方法:
var letters = [
["w", "o", "d", "r"],
["s", "y"],
["h", "e", "l", "o"]
];
var numbers = [
[1, 1, 2, 1],
[1, 1][1, 1, 2, 1]
];
var objArr = letters.map(function(c, i) {
return c.map(function(c2, i2, a2) {
return {
letter: c2,
instances: numbers[i]
}
})
});
console.log(objArr);
它正确地返回带有对象和正确字母值的多维数组,但是数字值不正确。有人能找到原因吗?还有,有人认为还有更好的方法来存储字母和数字数量吗?
答案 0 :(得分:3)
instances:
中的一个非常小的错误,请参见下文
var letters = [["w", "o", "d", "r"],["s", "y"],["h", "e", "l", "o"]];
var numbers = [[1,1,2,1],[1,1], [1,1,2,1]];
var objArr = letters.map(function(c,i) {
return c.map(function(c2,i2) {
return {letter: c2, instances: numbers[i][i2]}
})
});
console.log(objArr)
答案 1 :(得分:1)
由于具有二维数组,因此需要使用两个索引来访问它。使用第一个索引i
访问内部数组,使用第二个索引j
访问数组内部的数字。
let letters = [["w", "o", "d", "r"],["s", "y"],["h", "e", "l", "o"]],
numbers = [[1, 1, 2, 1],[1, 1],[1, 1, 2, 1]],
result = letters.map((arr, i) => arr.map((letter, j) => ({letter,instances: numbers[i][j]})));
console.log(result);