映射数组将返回逗号

时间:2018-09-24 11:18:28

标签: javascript node.js

代码尝试在给定时间段内查找数组中的值,我不知道为什么要包含逗号...

找到正确的数组项,我想知道我的错误在哪里。

如何在不使用替换/拆分等的情况下仅获取值?

我尝试使用过滤器,但是返回2017-4,1287,12,也很奇怪。

console.log(period); // "2017-4"

console.log(data);

/* 
[ [ '2015-1', 280, 1 ],
  [ '2015-2', 21815, 2 ],
  [ '2015-3', 27892, 3 ],
  [ '2015-4', 49387, 4 ],
  [ '2016-1', 29997, 5 ],
  [ '2016-2', 31905, 6 ],
  [ '2016-3', 37341, 7 ],
  [ '2016-4', 30101, 8 ],
  [ '2017-1', 37439, 9 ],
  [ '2017-2', 31757, 10 ],
  [ '2017-3', 943, 11 ],
  [ '2017-4', 1287, 12 ],
  [ '2018-1', 17462, 13 ],
  [ '2018-2', 22617, 14 ],
  [ '2018-3', 27882, 15 ] ]
*/

let actual = data.map(item => {
    if (item[0] == period) return item[1];
});

console.log(actual); // ,,,,,,,,,,,1287,,,

2 个答案:

答案 0 :(得分:4)

您需要使用Array#find仅获取数组的单个项目。

Array#map创建一个未定义的新数组,或者如果period匹配,则为所需值。

var period = "2017-4",
    data = [['2015-1', 280, 1], ['2015-2', 21815, 2], ['2015-3', 27892, 3], ['2015-4', 49387, 4], ['2016-1', 29997, 5], ['2016-2', 31905, 6], ['2016-3', 37341, 7], ['2016-4', 30101, 8], ['2017-1', 37439, 9], ['2017-2', 31757, 10], ['2017-3', 943, 11], ['2017-4', 1287, 12], ['2018-1', 17462, 13], ['2018-2', 22617, 14], ['2018-3', 27882, 15]],
    actual = data.find(([p]) => p === period)[1];

console.log(actual);

答案 1 :(得分:2)

由于.map总是返回与原始数组相同长度的数组,所以得到逗号-当return不等于{{1时,您的函数不会item[0] }},并因此返回period。 (尽管我不确定为什么控制台没有显示这些显式的undefined值。)

如果只想保留正确的日期,则应使用undefined而不是.filter。 (实际上是.map缩小为所需的结果,然后对结果进行.filter以获得第二个条目。)