代码尝试在给定时间段内查找数组中的值,我不知道为什么要包含逗号...
找到正确的数组项,我想知道我的错误在哪里。
如何在不使用替换/拆分等的情况下仅获取值?
我尝试使用过滤器,但是返回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,,,
答案 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
以获得第二个条目。)