2015-06-05 5 views
0

Я хочу возвратить несколько строк (по одной строке каждый раз, когда цикл for-loop идет), но он возвращает только первую строку. Я попытался написать функцию только для возврата строки, но у меня появились ошибки, потому что я не знаю, куда ее поместить.Хотите «вернуться» более одного раза

Каков хороший способ сделать это?

for (var i = 0; i < testArray.length; i +=3) { 
    geometry.vertices.push(
     new THREE.Vector3(testArray[i], testArray[i + 1], testArray[i + 2]), 
     new THREE.Vector3(testArray[i + 3], testArray[i + 4], testArray[i + 5])); 

    var line = new THREE.Line(geometry, material); 

    return line; 
    // or if using function, returnLine(line); 
} 

Покушение функция:

function returnLine(line) { 
    return line; 
} 
+4

'return' завершает функцию. Вы пытаетесь построить массив и вернуть его? – Izkata

+0

Я так не думаю. Я хочу вернуть геометрию, но есть несколько геометрий, которые я пытаюсь вернуть. «testArray» - это массив координат, поэтому первый Vector3 является одной точкой, а второй Vector3 - другой точкой. Существует линия, соединяющая два. –

+0

Может быть, что-то вроде этого? http://stackoverflow.com/questions/2282140/whats-the-yield-keyword-in-javascript – Mino

ответ

3

Вы можете вернуть только одно значение. Первый вызов return завершает вашу функцию. Вы не можете решить эту проблему, завернув свой оператор return в другую функцию.

Оберните значения, которые вы хотите, чтобы вернуться в массив, это позволяет получить доступ ко всем из них в вызывающей функции:

var output = new Array(); 

for (var i = 0; i < testArray.length; i +=3) { 
    geometry.vertices.push(
     new THREE.Vector3(testArray[i], testArray[i + 1], testArray[i + 2]), 
     new THREE.Vector3(testArray[i + 3], testArray[i + 4], testArray[i + 5])); 

    var line = new THREE.Line(geometry, material); 

    output.push(line); 
} 

return output; 

Таким образом, вы можете обработать ваш выход в вызывающей функции по цикл через возвращаемый массив и обработку каждой строки.

1
var lines = []; 
for (var i = 0; i < testArray.length; i +=3) { 
    geometry.vertices.push(
     new THREE.Vector3(testArray[i], testArray[i + 1], testArray[i + 2]), 
     new THREE.Vector3(testArray[i + 3], testArray[i + 4], testArray[i + 5])); 
    var line = new THREE.Line(geometry, material); 
    lines.push(line); 
} 
return lines; 
-1

return ключевое слово, используемое в функциях, вы можете по-прежнему цикл testArray с использованием метода map массива

var testArray = [1, 2, 3], //whatever 
newArray = []; 

newArray = testArray.map(function(element, i){ 
geometry.vertices.push(
    new THREE.Vector3(testArray[i], testArray[i + 1], testArray[i + 2]), 
    new THREE.Vector3(testArray[i + 3], testArray[i + 4], testArray[i + 5])); 

var line = new THREE.Line(geometry, material); 

return line; 

}); 

function returnLine(index) { 
    return newArray[ index || 0 ]; 
}; 
Смежные вопросы