在这里,我从用户那里获取数据。第一行包含一个整数,表示电话簿中的条目数。 每个后续行在单行上以空格分隔值的形式描述条目。第一个值是朋友的姓名,第二个值是数字电话号码。
例如:
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);
});
答案 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);
}