【问题标题】:Pushing Values into Array using Slice or Push still returning Undefined使用 Slice 或 Push 将值推送到数组中仍然返回 Undefined
【发布时间】:2023-03-09 14:30:01
【问题描述】:

我试图弄清楚如何简单地将值推送到数组中,并且正在努力在这里取得任何进展。我正在尝试创建一个简单的函数,您可以在其中输入一串数字,并在每个奇数之间返回破折号 - 所以:

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"]
}

所以我的主要问题是:为什么将 undefined 推入每个数组值?为什么也没有任何破折号被推入?

我已经尝试使用同样返回 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]);
        }

    }
}

这里的原则不一样吗?我觉得有什么我不明白的。感谢您的帮助。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    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函数,如果你想组合mapfilter,你应该检查reduce函数。

    【讨论】:

      猜你喜欢
      • 2019-04-22
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 1970-01-01
      • 2014-06-09
      • 2019-03-15
      • 1970-01-01
      相关资源
      最近更新 更多