【发布时间】:2018-05-15 01:06:43
【问题描述】:
所以我有 24 个“person”对象,它们是使用“names”数组创建的,因此“dude”名称会重复; 接下来,我创建了一个函数,将一些随机数与对象 id-s 进行比较,如果它们相等,那么我将尝试创建与该 id 匹配的人名的新数组。
(如果这听起来太复杂,我很抱歉,但我真的不明白为什么我的 map 方法 不起作用。)
这是我的代码的 2 个版本。 第一个有效,可以做我想做的事。
var names = ["jim", "jack", "aaron", "hugh", "jeff", "cameron", "allen", "charlie"];
var len = 3,
arr1 = [],
counter = 1;
for (var i = 0; i < len; i++) {
names.forEach(name => {
arr1.push({
id: counter,
dude: name
});
counter++;
});
}
console.log(arr1);
function checkName(nums) {
var namesarr = [];
for (var i = 0; i < arr1.length; i++) {
nums.forEach(function(num) {
if (num === arr1[i].id) {
namesarr.push(arr1[i].dude);
}
});
}
return (namesarr);
};
console.log(checkName([1, 3, 6]));
但是在第二个版本中,我的 map 函数返回 undefined, 我真的不明白为什么?!
var names = ["jim", "jack", "aaron", "hugh", "jeff", "cameron", "allen", "charlie"];
var len = 3,
arr1 = [],
counter = 1;
for (var i = 0; i < len; i++) {
names.forEach(name => {
arr1.push({
id: counter,
dude: name
});
counter++;
});
}
console.log(arr1);
function checkName(nums) {
var namesarr;
for (var i = 0; i < arr1.length; i++) {
namesarr = nums.map(function(num) {
if (num === arr1[i].id) {
return arr1[i].dude;
}
});
}
return (namesarr);
};
console.log(checkName([1, 3, 6]));
【问题讨论】:
-
你的
map函数总是返回一些东西。如果您不在显式的return语句中执行此操作,则返回值为undefined。换句话说:你不能使用map来创建一个长度不同的数组*。 -
namesarr.filter(a => a != null)将摆脱未定义但通常不返回地图看起来很不确定。使用地图前的过滤器删除不需要的值。 -
试试
.map(your map code).filter(code to filter out undefined)或其他方式:p -
与
console.log( [1, 3, 6].map(i => names[i - 1]) );相比,这似乎有点过于复杂了
标签: javascript arrays object dictionary