我有两个数组:arrayOfIds和arrayOfScores。我需要将相应的id映射到得分(1on1 map),最后我应该有{id_i,score_i}项的数组。从arrayOfIds到arrayOfScores的第一个得分的第一个id。有没有比使用双循环更好的方法呢?两个阵列当然都有相同的长度。
示例:
var arrayOfIds = ['4', '6', '8', '10', '12'];
var arrayOfScores= [0.1, 0.5, 0.8, 0.3, 0.7];
结果:
var combined = [ {id: '4', score: 0.1},
{id: '6', score: 0.5},
{id: '8', score: 0.8},
{id: '10', score: 0.3},
{id: '12', score: 0.7}
];
答案 0 :(得分:3)
你可以只映射其中一个数组,并使用索引从另一个数组中获取数据,只要它们长度相同
var arrayOfIds = ['4', '6', '8', '10', '12'];
var arrayOfScores = [0.1, 0.5, 0.8, 0.3, 0.7];
var combined = arrayOfIds.map( (x,i) => ({id : x, score : arrayOfScores[i]}));
console.log(combined)
答案 1 :(得分:1)
我不确定为什么你需要一个双循环for this。即使使用for
循环,您也只需要一个。只需在两个阵列上使用相同的索引。
var arrayOfIds = ['4', '6', '8', '10', '12'];
var arrayOfScores = [0.1, 0.5, 0.8, 0.3, 0.7];
var result = [];
for (var i = 0; i < arrayOfIds.length; i++) {
result.push({
id: arrayOfIds[i],
score: arrayOfScores[i]
});
}
console.log(result);
这假设长度相同。如果没有,你需要调整它。
可以以类似的方式使用任何其他可用的循环结构。我们的想法是在每次迭代中访问两个数组。所以这是一个使用for of
而不是其他一些现代功能的例子。
var arrayOfIds = ['4', '6', '8', '10', '12'];
var arrayOfScores = [0.1, 0.5, 0.8, 0.3, 0.7];
var result = [];
for (const [i, id] of arrayOfIds.entries()) {
result[i] = {
id,
score: arrayOfScores[i]
};
}
console.log(result);
这是一个使用Array.from
:
var arrayOfIds = ['4', '6', '8', '10', '12'];
var arrayOfScores = [0.1, 0.5, 0.8, 0.3, 0.7];
var result = Array.from(arrayOfIds, (id, i) => ({id, score: arrayOfScores[i]}))
console.log(result);
答案 2 :(得分:0)
你可以使用lodash _.zip
和一些ES6箭头函数,数组解构和速记对象属性来缩短它。
const ids = [1, 2, 3];
const scores = [1100, 1000, 900];
const result = _.zip(ids, scores).map(([id,score]) => ({id, score}));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>