我试图弄清楚如何将值简单地推入数组中,并且在这里努力取得任何进展。我正在尝试创建一个简单的函数,在其中输入一串数字,并在每个奇数之间返回破折号-因此:
oddDash(11146); // should return 1-1-146
oddDash(24662); // should return 24662
oddDash(9899); // should return 989-9
已经阅读了一下,似乎需要首先初始化数组以防止出现未定义的实例,但是无论如何它都会将undefined推入每个数组值中。
这是我的代码:
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"]
}
所以我的主要问题是:为什么将undefined推入每个数组值?为什么不插入任何破折号?
我尝试过使用slice(它也返回未定义)和普通的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]);
}
}
}
这里的原理不一样吗?我觉得有些事情我不了解。感谢您的帮助。
答案 0 :(得分:0)
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
和filter
,则应签出reduce
函数