console.log vs return:不同的结果(JS)

时间:2018-03-28 17:16:47

标签: javascript function return

我不明白为什么下面的代码会在console.log函数和filter函数中的return中给出不同的结果:

function expandedForm(num) {

  let arr = num.toString().split('').reverse().filter(function(el, ind){   
    console.log("iter:"+ el * Math.pow(10,ind));
    return (el*Math.pow(10,ind))
  });
  console.log(arr);
  return arr;
}

expandedForm(402);

给出了这个:

iter:2
iter:0
iter:400
[ '2', '4' ]
=> [ '2', '4' ]

修改: 显然,我还不够清楚。为了直截了当,为什么我在console.log中获得400,在过滤器中获得4?因此,问题更多地是对表达式el * Math.pow(10,ind)

的评估

3 个答案:

答案 0 :(得分:1)

num.split('')返回一个数组['2', '0', '4']

num.split('').filter(function(){ return handler()})hander() is true时返回元素,然后第二个元素为'0',其最终结果为0,因此它不会保留此元素。

最后,重播是['2', '4']

As Array.prototype.filter() defined :(查看有关参数= 回调的说明。)

<强>语法

var newArray = arr.filter(callback[, thisArg])

<强>参数

callback
Function is a predicate, to test each element of the array. Return true to keep the element, false otherwise, taking three arguments:

    element
        The current element being processed in the array.
    indexOptional
        The index of the current element being processed in the array.
    arrayOptional
        The array filter was called upon.

thisArg Optional
Optional. Value to use as this when executing callback. 

答案 1 :(得分:1)

因为数组上的过滤器不会操纵数组中的元素

例如:

const arr = [1, 2, 3];
const newArr = arr.filter(e => {
  const newElement = e * 100;
  return newElement;
}

这里我们期望newArray为[100,200,300],但我们收到它[1,2,3]。

原因 - 来自过滤器的返回值仅用于真/假关注,它实际上不返回该值。这就是为什么你没有获得0的价值。

如果您想要输出[2,0,400]

,可以尝试以下代码
const arr = num.toString().split('').reverse().map((el, ind) => {
  return (el * Math.pow(10,ind));
});

如果您想要输出为[2,400],

const arr = num.toString().split('').reverse().map((el, ind) => {
  return (el * Math.pow(10,ind));
}).filter(e => e);

答案 2 :(得分:0)

您需要阅读.filter function https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

的文档
  

包含通过测试的元素的新数组。如果没有元素通过   测试时,将返回一个空数组。

从filter函数返回的内容并不重要,如果每个索引的true为false,则无关紧要。当你在402中有0时,它跳过中间元素并仅返回> 0

的元素