$ .map和$ .grep在一起?

时间:2014-03-28 08:10:36

标签: jquery arrays

我有这个简单的脚本:

var stdout = "A test.js\nD README.md\nD CONTRIBUTING.md\nM something.txt";

var out = $.grep( stdout.split("\n"), function (row) {
    return (row.substring(0, 1) == "D");
});

JSFIddle [x]

它返回一个只包含以D开头的行的数组,结果如下:

D README.md
D CONTRIBUTING.md

我需要获取一个以D开头的行的数组,但我需要从行中删除D,所以我需要这个结果:

README.md
CONTRIBUTING.md

如果我只使用$.map,我无法找到办法在没有履行条件的情况下退货...

var out = stdout.split("\n").map(function (row) {
    return (row.substring(0, 1) == "D") ? row.substring(1).trim() : null;
});
// returns: [null, 'README.md', 'CONTRIBUTING.md', null]
// I need: ['README.md', 'CONTRIBUTING.md']

我认为我应该混合使用$.map$.grep,但这个简单的任务看起来代码太多了。
实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以使用$.map() - 如果您从$ .map()回调中返回undefined,则该值将被忽略

var regex = /^D/;
var out = $.map(stdout.split("\n"), function (row) {
    return regex.test(row) ? $.trim(row.substring(1)) : undefined
});

演示:Fiddle