过滤Node.js

时间:2018-04-15 07:12:52

标签: node.js

在这里,我从用户那里获取数据。第一行包含一个整数,表示电话簿中的条目数。 每个后续行在单行上以空格分隔值的形式描述条目。第一个值是朋友的姓名,第二个值是数字电话号码

例如:

2
sam 99912222
tom 11122222

因此,在处理此输入时,我将从用户获取条目数并将其分配给变量noOfIterations。对于后续条目,我将其分配给对象列表,其中格式为:例如。 [{ sam: '99912222' },{ tom: '11122222' }]

但问题是我在安慰[ 'sam 99912222', 'tom 11122222' ]变量时得到了map。为什么我会这样做?

function processData(input) {
    var noOfIterations = 0;
     var map = input.split('\n').filter(function (string, index){
        if(index===0){
            noOfIterations = parseInt(string);
        }
        else{
            var splitStrings = string.trim().split(' ');
            var obj = {};
            obj[splitStrings[0]] =  splitStrings[1];
            console.log(obj);
            return obj;
        } 
     });
     console.log(map);
} 

process.stdin.resume();
process.stdin.setEncoding("ascii");
_input = "";
process.stdin.on("data", function (input) {
    _input += input;
});

process.stdin.on("end", function () {
   processData(_input);
});

1 个答案:

答案 0 :(得分:1)

您需要使用map代替filter来转换输入数据。

function processPhoneBook(input) {
    var result = input.split('\n')
        .filter(function(line, index) { return index > 0 })
        .map(function(line) {
            var splitLine = line.trim().split(' ');
            return {[splitLine[0]]: splitLine[1]};
        });

    console.log(result);
}

实施例:  processPhoneBook("3\nana 1\npep 2")输出[ { ana: '1' }, { pep: '2' } ]

我已删除noOfIterations var,因为您没有使用它。如果需要使用它进行进一步处理,可以在映射阶段后过滤结果:

function processPhoneBook(input) {
    var noOfIterations = 0;
    var result = input.split('\n')
        .map(function(line, index) {
            if (index === 0) {
                noOfIterations = parseInt(line);
                return null;
            }
            var splitLine = line.trim().split(' ');
            return {[splitLine[0]]: splitLine[1]};
        })
        .filter(function(line) { return line != null })

    console.log(result);
}