не может вернуть значение / переменную в функцию - PullRequest
0 голосов
/ 04 ноября 2018

когда я console.log отображает все массивы как строки, потому что в моих массивах они являются многомерными; смотрите ниже код с использованием console.log в функции, без возврата, но не определено

function changeStrings(arr, replacement) {
    var newArr = []

  for ( var i = 0 ; i < arr.length ; i++) {
    newArr.push(arr[i].split(" "))
  }

  for ( var j = 0 ; j < replacement.length ; j++ ) {
    newArr[0][3] = replacement[j-2]
    newArr[1][3] = replacement[j-1]
    newArr[2][4] = replacement[j]
  }
   
  for ( var k = 0 ; k < newArr.length ; k++ ) {
    console.log(newArr[k].join(" "))
  }
 
};


let initial = ["my city in London", "my name is Mike", "my phone number is 00909090"];
let replacements = ['Paris', 'John', '1234'];

console.log(changeStrings(initial, replacements))

и если я использую return, он просто печатает одну строку;

отметьте это

function changeStrings(arr, replacement) {
    var newArr = []

  for ( var i = 0 ; i < arr.length ; i++) {
    newArr.push(arr[i].split(" "))
  }

  for ( var j = 0 ; j < replacement.length ; j++ ) {
    newArr[0][3] = replacement[j-2]
    newArr[1][3] = replacement[j-1]
    newArr[2][4] = replacement[j]
  }
   
  for ( var k = 0 ; k < newArr.length ; k++ ) {
    var dispplay = newArr[k].join(" ")
    return dispplay
  }
 
};

// now let's test out our functions!
let initial = ["my city in London", "my name is Mike", "my phone number is 00909090"];
let replacements = ['Paris', 'John', '1234'];

console.log(changeStrings(initial, replacements))

переменная newArr является многомерным массивом это выглядит так;

[ [ 'my', 'city', 'in', 'Paris' ],
  [ 'my', 'name', 'is', 'John' ],
  [ 'my', 'phone', 'number', 'is', '1234' ] ]

Я пытаюсь использовать цикл for для этого случая, потому что я хочу тренировать свою логику;), может кто-нибудь помочь мне выяснить, в чем дело? или это исправить? спасибо

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Проблема в том, что оператор return немедленно завершает весь цикл (так же, как break). Вы не можете вернуться прямо так, если хотите закончить цикл. С другой стороны, вы можете использовать его преднамеренно, чтобы завершить цикл, например, если вы нашли нужный элемент и больше не хотите повторять цикл.

Как на самом деле использовать возврат в цикле:

let fruit = ['apple', 'orange', 'pear', 'strawbery'];
let myFavoriteFruit === 'orange';

const IncludesMyFavouriteFruit = (list) => {
    for (let item of list) {
        if (item === myFavoriteFruit) return true;  // Ends the loop; we'll never get to 'pear' and 'strawbery'.
    }
    return false; // There is not my favourite fruit.
}

Извините за использование ES6, лень писать старый JS.

0 голосов
/ 04 ноября 2018

Функция возвращается сразу после первой итерации цикла. Это предотвращает выполнение остальных итераций. Вы должны вернуть массив из функции. Вы можете push() все элементы массива внутри цикла, а затем вернуть массив:

function changeStrings(arr, replacement) {
  var newArr = []

  for ( var i = 0 ; i < arr.length ; i++) {
    newArr.push(arr[i].split(" "))
  }

  for ( var j = 0 ; j < replacement.length ; j++ ) {
    newArr[0][3] = replacement[j-2]
    newArr[1][3] = replacement[j-1]
    newArr[2][4] = replacement[j]
  }
  var display = [];
  for ( var k = 0 ; k < newArr.length ; k++ ) {
    display.push(newArr[k].join(" "));
  }
 
  return display
};

// now let's test out our functions!
let initial = ["my city in London", "my name is Mike", "my phone number is 00909090"];
let replacements = ['Paris', 'John', '1234'];

console.log(changeStrings(initial, replacements))
...