javascript - 使用 Slice 或 Push 将值推送到数组中仍然返回 Undefined
问题描述
我试图弄清楚如何简单地将值推送到数组中,并且正在努力在这里取得任何进展。我正在尝试创建一个简单的函数,您可以在其中输入一串数字,并在每个奇数之间返回破折号 - 所以:
oddDash(11146); // should return 1-1-146
oddDash(24662); // should return 24662
oddDash(9899); // should return 989-9
仔细阅读后,似乎需要首先初始化数组以防止未定义的实例,但无论如何它都会将未定义推送到每个数组值中。
这是我的代码:
function oddDash(n) { // e.g. var n = 11146;
var arr = (""+n).split(""); // ["1", "1", "1", "4", "6"]
var result = []; // initialisation
result = arr.map(function(c,i,a) {
if (c % 2 != 0 && a[i+1] % 2 != 0) { // if this & next values are odd
result.push(c);
result.push('-');
} else {
result.push(c);
}
}); // should return ["1", "-", "1", "-", "1", "-", "4", "6"]
}
所以我的主要问题是:为什么未定义被推入每个数组值?为什么也没有任何破折号被推入?
我已经尝试使用同样返回未定义的切片,并使用不做任何事情的普通 for 循环。
出于好奇,有人可以解释为什么以下工作:
// NO ERROR
var arr = ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
var result = arr.map(function(c,i,a) {
console.log(c);
});
但是以下三个不起作用:
// FAILS
var arr = ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
var result = arr.map(function(c,i,a) {
result.slice(c);
});
// FAILS
why doesht this work>?
var arr = ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
var result = arr.map(function(c,i,a) {
result.push(c);
});
// DOES NOTHING
function oddDash(n) { // e.g. var n = 11146;
var arr = (""+n).split(""); // ["1", "1", "1", "4", "6"]
var result = []; // initialisation
for (k = 0; k > arr.length; k++) {
if (arr[k] % 2 != 0 && arr[k+1] % 2 != 0) {
result.push(arr[k]);
result.push('-');
} else {
result.push(arr[k]);
}
}
}
这里的原理不一样吗?我觉得有什么我不明白的。感谢您在这里的任何帮助。
解决方案
该map
函数遍历一个集合,并返回一个新集合,其中每个元素都替换为其对应的返回值。这意味着如果您在回调函数中不返回任何内容,则数组将被填充undefined
为值。
例如:
// new array will equal [2,3,4]
const array = [1,2,3].map(element => element + 1);
// but... new array will equal [undefined, undefined, undefined]
const array = [1,2,3].map(element => console.log(element));
即使您将值推送到新数组,您也会将映射数组的值分配给它,然后将其undefined
作为值填充,因此这是您的数组的最终值。因此,请尝试返回您想要的值,而不是将它们推送到新数组。
如果要删除特定元素,则应使用该filter
函数,如果要组合map
and filter
,则应检查该reduce
函数。
推荐阅读
- postgresql - 当实体 id 包含特殊字符时,Fiware Cygnus PostgreSQL 接收器不创建表
- ios - iPhone 12 mini 屏幕参数出乎意料
- networking - 网络调用检索 Steam 游戏目录
- swift - Swift Result<> 无法转换为向下转换的结果
- reactjs - 如何修复日期选择器在视图中重叠的文本?
- python - 图像未在烧瓶上渲染 - 图像损坏 - 图片保存在静态/图像中
- javascript - React-Router-Dom:页面内容不显示
- javascript - Webpack - Typescript - Babel Loader 不转译 JSON 导入
- javascript - 动态应用 Mixin 的问题 - A-FRAME
- django - Django formtools 用户注册密码