2016-02-17 3 views
0

Im, используя node.js для отображения элементов из txt-файла. Мне нужно распечатать их с терминала, однако я хочу, чтобы он принимал больше параметров, и теперь он принимает их, но только печатает один из них (последний), я хочу, чтобы он печатал каждый элемент в параметре и выносил их из списка.Node.js Почему он будет печатать только один за раз

// Make sure we got a filename on the command line. 
 
if (process.argv.length < 3) { 
 
    console.log('Usage: node ' + process.argv[1] + ' FILENAME'); 
 
    process.exit(1); 
 
} 
 
// Read the file and print its contents. And split into an array after each space 
 
var fs = require('fs') , filename = process.argv[2]; 
 
var array = fs.readFileSync('dependencies.txt').toString().split('\n'); 
 
\t //console.log(array[0]); 
 

 
    
 

 

 
if(process.argv.length >= 3){ 
 
    for(var j = 3; j < process.argv.length; j++) 
 
    var test = process.argv[j]; 
 
    functionName(test); 
 
} 
 
    
 

 

 

 
function functionName(test){  
 
    for(var i = 0; i < array.length; i++){ 
 
    var pattern = /([^\s]+)/g; 
 
    var line = pattern.exec(array[i]); 
 
if(line && test == line[0]){ 
 
console.log(array[i]); 
 
    } 
 
    } 
 
} 
 

 

 

 

 
//fs.readFile(filename, 'utf8', function(err, data) { 
 
// if (err) throw err; 
 
// console.log('OK: ' + filename); 
 
// console.log(data) 
 
//});

how it prints out

+0

Вы ожидали назвать 'functionName' один раз для каждой итерации этого цикла? потому что это не то, что вы делаете. вместо 'functionName (test);' происходит после завершения цикла. –

+0

да, мне нужно, чтобы он просматривал и печатал каждый элемент, который был вызван в терминале – user3010196

+0

, поэтому используйте правильный '{' '}', когда у вас есть цикл for с несколькими строками. или сделать его одной строкой, удалив строку «var test». –

ответ

1

для цикла может содержать только один оператор, так что если вам нужно больше, чем один, вы должны обернуть его в block statement.
(Thanks @paulpro)

Я бы просто добавил оператор блока для всех для циклов, это более читаемо таким образом, если оно не было достаточно коротким, чтобы быть читаемым на одной строке.

for(var j = 3; j < process.argv.length; j++) { 
    //var test = process.argv[j]; 
    functionName(process.argv[j]); 
} 
let len = process.argv.length, j = 3; 
for (;j<len;j++) functionName(process.argv[j]); 
+0

В частности, цикл for всегда состоит из ровно одного оператора, будь то на нескольких строках или одной строке, или на той же строке, что и заголовок цикла. Если вы хотите, чтобы в цикле было несколько операторов, вам нужно использовать [оператор блока] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/block). – Paulpro

Смежные вопросы